У меня проблема с переносом моего функтора из windows в linux.(функтор для передачи в stl :: map для строгого-слабого упорядочения) Оригинал выглядит следующим образом:
struct stringCompare{ // Utilized as a functor for stl::map parameter for strings
bool operator() (string lhs, string rhs){ // Returns true if lhs < rhs
if(_stricmp(lhs.c_str(), rhs.c_str()) < 0) return true;
else return false;
}
};
Поскольку linux не поддерживает _stricmp, но вместо этого использует strcasecmp, я изменил его на:
struct stringCompare{
bool operator() (string lhs, string rhs){ // Returns true if lhs < rhs
if(strcasecmp(lhs.c_str(), rhs.c_str()) < 0) return true;
else return false;
}
};
И теперь он жалуется на параметры "const":
passing const stringCompare as this argument of bool stringCompare::operator()
(std::string, std::string)â discards qualifiers
Я не совсем уверен, почему предполагается, что stringCompare должна быть константой ...
Истрока, где он без ума от этого экземпляра, выглядит следующим образом:
if(masterList->artistMap.count(songArtist) == 0)
artistMap - это stl :: map со строковым ключом.
Я не уверен, где я ошибаюсь.Я попытался изменить параметры оператора bool () на const, так как кажется, что он жалуется на какую-то непостоянную передачу параметров.Это не сработало и не изменило bool operator () на const bool operator ().
Насколько я знаю, strcasecmp - это константная функция, поэтому следует ли передавать ее непостоянные или постоянные параметры (c_str () также является константой), поэтому я не совсем уверен, где я ошибаюсь.
Я гуглил подобные проблемы, но до сих пор не могу понять смыслпроблема из того, что я видел как в stackoverflow, так и в нескольких других местах.
Тип данных, где я использую это:
map<string, set<song, setSongCompare>*,stringCompare > artistMap;