我在下面宣布了std:map:
std::map<std::string, std::set<unsigned char*>> FilesMap;
int InsertData(unsigned char* name)
{
// here i try to insert pair with name above and clear std::set
FilesMap.insert(std::pair<std::string, std::set<unsigned char*>>(std::string((char*)name), std::set<unsigned char*>()));
}
但我有很多错误:
错误16错误C2676:二进制'&lt;':'const std :: string'没有定义 此运算符或转换为预定义可接受的类型 运算符c:\ program files(x86)\ microsoft Visual Studio 10.0 \ VC \包括\ xfunctional
我做错了什么?
答案 0 :(得分:3)
首先,这条可怕的长线
FilesMap.insert(std::pair<std::string, std::set<unsigned char*>>(std::string((char*)name), std::set<unsigned char*>()));
如果使用std :: make_pair函数,可以简化,这将推导出模板参数。
FilesMap.insert(std::make_pair(std::string(reinterpret_cast<char*>name)), std::set<unsigned char*>()));
其次,您可以为您的集合创建一个typedef,以便更简化上述行
typedef std::set<unsigned char*> mySetType;
std::map<std::string, mySetType>> FilesMap;
FilesMap.insert(std::make_pair(std::string(reinterpret_cast<char*>name)), MySetType()));
最后,最重要的是,我认为编译器无法为std :: string找到合适的operator <
的原因是你忘了#include<string>
答案 1 :(得分:0)
使用std :: map的要求是密钥类型必须具有operator <
。对于没有此运算符的std :: string,您似乎遇到了错误。确保您已包含字符串标题#include <string>
。