簡體   English   中英

使用std :: string作為std :: map的鍵

[英]Using an std::string as a key for an std::map

我想有一個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框架的某個深處,它似乎忽略了上面的定義,默認為operator <。

在VS2010 .NET 4.0中有沒有辦法使用字符串作為地圖的關鍵?

我知道我可以接受該字符串並編寫一個函數將其哈希到一個int,但那里的樂趣在哪里?

編輯

我將盡力為大衛解釋這一點。 當映射使用比較器結構時,它在發布時崩潰並在調試中失敗調試斷言。 失敗的斷言在xtree第1746行。

表達式:無效的運算符<

|中止| |重試| |忽略|

這就是讓我相信盡管給地圖一個比較器,它仍然向某些路徑默認為運算符<進行比較。 我的代碼中導致這一點的行是:

CustomObject o = stringObjectMap[key];

錯誤24錯誤C2676:二進制'<':'const std :: string'未定義此運算符或轉換為預定義運算符可接受的類型c:\\ program files \\ microsoft visual studio 10.0 \\ vc \\ include \\ xfunctional 125 1 FXCMMarketDataServer

當你忘記包含<string>時,這就是VC吐在你臉上的東西。 該標題明確定義了此運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM