оператор <для пользовательского ключа карты - C2679 - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь создать карту типа

std::map<std::map <std::string,std::string>, MyDataTyp*>, 

поэтому ставлю

std::map<std::string, std::string> 

в отдельном классе, например:

class TagList {
public:
std::map<std::string, std::string> _map;

TagList() {}
~TagList() {}
void addTag(const std::string tag, const std::string value) { if (tag != "") _map[tag] = value; }
std::string getValue(const std::string tag) {
    std::map<std::string, std::string>::iterator it = _map.find(tag);
    if (it == _map.end()) return ("");
    else return (it->second);
}

};

inline bool operator< (const TagList &a, const TagList &b) {

std::map<std::string, std::string>::iterator it ;
for (it = a._map.begin(); it != a._map.end(); it++) {
    std::string myVal1 = it->second;
    std::string myVal2 = b._map.find(it->first);
    if (myVal2 == "") return false;
    if (strcmp(myVal1.c_str(),myVal2.c_str()) > 0) return true;

}
return false;

}

Надеюсь, кто-то может объяснить мне сообщение об ошибке

Ошибка 4, ошибка C2679: двоичный файл '=': не найден оператор, который принимает правый операнд типа 'std :: _ Tree_const_iterator <_Mytree>' (или нет приемлемого преобразования) (...)

... и в чем причина моего признания ....

1 Ответ

0 голосов
/ 14 мая 2018

Извините, я виноват ...

нашел ответ сам:

inline bool operator< (const TagList &a, const TagList &b) {

std::map<std::string, std::string>::const_iterator it ;
std::map<std::string, std::string>::const_iterator it2 ;
for (it = a._map.begin(); it != a._map.end(); it++) {
    std::string myVal1 = it->second;
    it2 = b._map.find(it->first);
    std::string myVal2 = it2->second;
    if (myVal2 == "") return false;
    if (strcmp(myVal1.c_str(),myVal2.c_str()) > 0) return true;

}
return false;
}

это не было постоянным

Thx George

...