Не удалось найти ответ в Google ..
Когда я использую std :: string, все работает нормально.
map <fxString, int> test;
test.insert(pair <fxString, int> ("Bla", 1));
test.insert(pair <fxString, int> ("Bla", 2));
test.insert(pair <fxString, int> ("Bla", 3));
cout << fxInt2String(test["Bla"]) << endl;
Что должно вывести 1, но вместо этого вывести 0
Когда я просматриваю карту, каждая пара «ключ-значение» сидит рядом друг с другом, издеваясь надо мной.
FxString определяет следующие операторы: оператор> оператор <оператор == оператор! =
И еще, и я их тестировал ..
Гром.
2 ответа
"Когда я просматриваю карту каждые пара ключ-значение есть "
Что ж, что-то не так с вашим fxString::operator<
, потому что функция-член insert
не должна иметь никакого эффекта, если ключ уже присутствует. Вы уверены, что этот оператор моделирует строгое слабое упорядочение?
Если предположить, что оператор не работает, test["Bla"]
приводит к добавлению еще одного элемента на карту со значением по умолчанию 0.
operator<
почти наверняка является причиной обеих проблем. Причина, по которой карта вставляет каждую новую запись, заключается в том, что она ищет «Bla» и не может ее найти. Точно так же при поиске он не может найти «Bla» и возвращает значение по умолчанию (одновременно добавляя новую пару).
Это отлично работает (как вы заметили)
map <string, int> test;
test.insert(pair <string, int> ("Bla", 1));
test.insert(pair <string, int> ("Bla", 2));
test.insert(pair <string, int> ("Bla", 3));
cout << test["Bla"] << endl;
Значит, должна быть проблема либо с вашей функцией fxInt2String
, либо с перегрузкой вашего оператора.
Чтобы получить дополнительную помощь, вы должны предоставить нам код для рассматриваемых функций.
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.
fxString
иfxInt2String
?<
?operator<
должен возвращать false для равных объектов.