我想要一個std :: map(int .NET 4.0)。我們當然知道一張地圖是一棵樹,並且需要一個字符串沒有爲我們定義的操作符<。使用std :: string作爲std :: map的鍵
錯誤24錯誤C2676:二進制 '<': '常量的std :: string' 不限定此運算符或轉換到類型接受的預定義操作C:\程序Files \ Microsoft的Visual Studio 10.0 \ VC \包括\ xfunctional 125 1 FXCMMarketDataServer
所以我把我的谷歌,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;
這一段時間工作得很好,現在我遇到一個bug我相信這是由於這一點。在STL框架內部的某處,似乎忽略了上述定義,並默認爲運營商<。
有沒有在VS2010 .NET 4.0中使用字符串作爲地圖的關鍵的方法?
據我所知,我可以採取該字符串,並寫一個函數將其散列到一個int,但在那裏的樂趣呢?
編輯
我會嘗試盡我所能爲大衛解釋。當映射使用比較器結構時,它在發行版中崩潰並在調試中失敗調試斷言。失敗的斷言是行的XTree 1746
表達:無效操作<
|中止| |重試| |忽略|
那是什麼使我相信,儘管給映射比較器,它仍然下來某些路徑默認爲運營商<進行比較。使這在我的代碼行是:
CustomObject o = stringObjectMap[key];
std :: string確實具有所需操作符的合適定義。你確定你已經包含頭文件嗎?我想我沒有看到類似的問題, std :: string的前向聲明意味着它的名字本身是已知的。 –
Keith
2011-02-08 22:30:22
.NET與std :: map或std :: string無關 – 2011-02-08 22:41:40