Не удалось найти ответ в 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 определяет следующие операторы: оператор> оператор <оператор == оператор! =

И еще, и я их тестировал ..

Гром.

0
Tony 29 Ноя 2010 в 23:26
Что такое fxString и fxInt2String?
 – 
Šimon Tóth
29 Ноя 2010 в 23:30
1
Как выглядит ваш оператор <?
 – 
Nim
29 Ноя 2010 в 23:30
operator< должен возвращать false для равных объектов.
 – 
Eclipse
29 Ноя 2010 в 23:49

2 ответа

Лучший ответ

"Когда я просматриваю карту каждые пара ключ-значение есть "

Что ж, что-то не так с вашим fxString::operator<, потому что функция-член insert не должна иметь никакого эффекта, если ключ уже присутствует. Вы уверены, что этот оператор моделирует строгое слабое упорядочение?

Если предположить, что оператор не работает, test["Bla"] приводит к добавлению еще одного элемента на карту со значением по умолчанию 0.

6
icecrime 29 Ноя 2010 в 23:50
2
+1 - operator< почти наверняка является причиной обеих проблем. Причина, по которой карта вставляет каждую новую запись, заключается в том, что она ищет «Bla» и не может ее найти. Точно так же при поиске он не может найти «Bla» и возвращает значение по умолчанию (одновременно добавляя новую пару).
 – 
Eclipse
29 Ноя 2010 в 23:48
@Eclipse: верно, ответ отредактирован, чтобы объяснить, почему отображается 0
 – 
icecrime
29 Ноя 2010 в 23:50
1
Я реализовал очень простую быструю проверку для operator <, но иногда она возвращала true, даже если две строки одинаковы. Спасибо друг! знак равно
 – 
Tony
30 Ноя 2010 в 12:49

Это отлично работает (как вы заметили)

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, либо с перегрузкой вашего оператора.

Чтобы получить дополнительную помощь, вы должны предоставить нам код для рассматриваемых функций.

0
Palmik 29 Ноя 2010 в 23:40
Я, конечно, читал. Я только что привел пример, который работает (и автор это знает). Итак, сам ответ: «Значит, проблема должна быть либо с вашей функцией fxInt2String, либо с перегрузкой вашего оператора». Без дополнительного кода мы мало что можем сделать.
 – 
Palmik
29 Ноя 2010 в 23:37
В любом случае отредактировано для вашего удобства: P
 – 
Palmik
29 Ноя 2010 в 23:40