Я хотел бы иметь std:: map (int.NET 4.0). Мы, конечно, знаем, что карта является деревом и требует оператора < эта строка для нас не определена.
Ошибка 24 ошибки C2676: двоичный '<': 'const std::string' не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора. c:\program files\microsoft visual studio 10.0\vc\include\xfunctional 125 1 FXCMMarketDataServer
Итак, я положил свой google-foo на работу и нашел это решение:
struct StringComparerForMap
{
public:
bool operator()(const std::string x, const std::string y)
{
// Add compare logic here
}
};
...
std::map<std::string, CustomObject, StringComparerForMap> myMap;
Это сработало хорошо, и теперь я сталкиваюсь с ошибкой, которая, как мне кажется, связана с этим. Где-то в глубине структуры STL казалось бы, что он игнорирует приведенное выше определение и по умолчанию использует оператор <.
Есть ли способ в VS2010.NET 4.0 использовать строку в качестве ключа карты?
Я понимаю, что я могу взять эту строку и написать функцию для хэша для int, но где это весело?
ИЗМЕНИТЬ
Я попытаюсь объяснить это как можно лучше для Дэвида. Когда на карте используется структура сравнения, она выходит из строя в выпуске и не выполняет отладочное утверждение при отладке. Утверждение, которое терпит неудачу, находится в xtree строке 1746.
Выражение: неверный оператор <
| Прервать | | Повторить | | Игнорировать |
Вот что заставляет меня поверить, что, несмотря на то, что карта сопоставлена, она по-прежнему оставляет определенные пути по умолчанию для оператора < для сравнения. Строка в моем коде, которая вызывает это:
CustomObject o = stringObjectMap[key];