如何将std :: set放入std :: map

时间:2012-10-08 15:34:52

标签: c++ stdmap stdset

我在下面宣布了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

我做错了什么?

2 个答案:

答案 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>