0

以下の 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: バイナリ '<': 'const std::string' は、この演算子または事前定義された演算子 c: \program files (x86)\microsoft Visual Studio 10.0\vc\include に受け入れられる型への変換を定義していません\x機能

私は何を間違っていますか?

4

2 に答える 2

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()));

operator <そして最後に、そして最も重要なこととして、コンパイラが適切なstd::stringを見つけられない理由は、#include<string>

于 2012-10-08T15:40:29.820 に答える
0

std::map を使用するための要件は、キーの型にoperator <. この演算子を持たない std::string に関してエラーが発生しているようです。文字列ヘッダーが含まれていることを確認してください#include <string>

于 2012-10-08T15:41:15.907 に答える