Я хотел бы иметь std :: map (int .NET 4.0).Мы, конечно, знаем, что карта является деревом и требует оператора <эта строка не определяет для нас.</p>
Ошибка 24, ошибка C2676: двоичный файл <<:: const std :: string 'не определяет этот оператор или преобразование в тип, приемлемый для предопределенного оператора c: \ program files \ microsoft visualstudio 10.0 \ vc \ include \ xfunctional 125 1 FXCMMarketDataServer </p>
Поэтому я включил свой 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 может показаться, что она игнорирует приведенное выше определение и по умолчанию использует оператор <. </p>
. Есть ли способ в VS2010 .NET 4.0 использовать строку в качестве ключа карты?
Я понимаю, что могу взять эту строку и написать функцию для ее хеширования в int, но где в этом удовольствие?
РЕДАКТИРОВАТЬ
Iпостараюсь объяснить это как можно лучше для Дэвида.Когда карта использует структуру сравнения, она завершается с ошибкой в выпуске и завершается ошибкой утверждения отладки в отладке.Неудачное утверждение находится в строке 1746 xtree.
Выражение: недопустимый оператор <</p>
| Abort || Повторить || Ignore |
Это то, что заставляет меня верить, что, несмотря на то, что сопоставление сопоставляется с картой, оно все равно идет по определенным путям по умолчанию к оператору <для сравнения.Строка в моем коде, которая вызывает это: </p>
CustomObject o = stringObjectMap[key];