Как вы можете видеть в моем коде, lenMap
- это std::map
с помощью функции сравнения . Эта функция просто проверяет длину строки.Как не использовать пользовательскую функцию сравнения std :: map в поиске (map :: find)?
Теперь, когда я хочу найти какой-либо ключ (используя map::find
), карта по-прежнему использует эту функцию сравнения.
Но Как я могу заставить свою карту не использовать ее при поиске какого-либо ключа?
Код:
struct CompareByLength : public std::binary_function<string, string, bool>
{
bool operator()(const string& lhs, const string& rhs) const
{
return lhs.length() < rhs.length();
}
};
int main()
{
typedef map<string, string, CompareByLength> lenMap;
lenMap mymap;
mymap["one"] = "one";
mymap["a"] = "a";
mymap["foobar"] = "foobar";
// Now In mymap: [a, one, foobar]
string target = "b";
if (mymap.find(target) == mymap.end())
cout << "Not Found :) !";
else
cout << "Found :(!"; // I don't want to reach here because of "a" item !
return 0;
}
Нет. Я действительно хочу заменить «b» на «a». поэтому моя пользовательская функция сравнения в порядке. моя проблема заключается в поиске фазы. – Emadpres
Если вы замените «b» на «a», то почему вы ожидаете найти «b»? Это прошло. –