19

文字列をキー値形式で保存する必要があります。だから、以下のようなマップを使用しています。

#include<map>
using namespace std;
int main()
{
    map<string, string> m;
    string s1 = "1";
    string v1 = "A";

    m.insert(pair<string, string>(s1, v1)); //Error
}

挿入行で以下のエラーが発生しています

エラーC2784:'bool std :: operator <(const std :: _ Tree <_Traits>&、const std :: _ Tree <_Traits>&)':'const std :: _ Tree <_Traits>&'のテンプレート引数を推測できませんでした'const std::string'から

以下のようにmake_pair関数も試しましたが、それでも同じエラーが報告されます。

m.insert(make_pair(s1, v1));

plsは私に何が間違っているのか、そして上記の問題の解決策は何であるのかを教えてくれます。上記の問題を解決した後、以下のようにキーに基づいて値を取得できますか

m.find(s1);
4

7 に答える 7

41

私はあなたが#include <string>どこかを逃していると思います。

于 2010-09-14T12:55:29.303 に答える
9

これを試していただけませんか:

#include<string>

コンパイラは文字列を比較する方法を知らないようです。map彼女はまだ弦について十分に知らないかもしれませんが、 ATMを理解するにはあなたに集中しすぎています。

于 2010-09-14T12:58:30.250 に答える
3

m[s1] = v1;代わりに試してください。

于 2010-09-14T12:53:58.980 に答える
1

<map>が含まれていないことに関係していると思います<string><xstring>。要素をマップに追加する場合、並べ替えによってマップ内の正しい位置を見つける必要があります。並べ替えの際、map は を見つけようとしoperator <、そこから新しい要素の正しい場所を見つけます。ただし、 にはoperator <string の定義がないため<xstring>、エラー メッセージが表示されます。

于 2010-09-14T13:25:11.700 に答える
-2

s1 は、文字列として渡すことを望んでいる整数です...それがおそらくエラーの主な原因です!!

于 2016-03-14T13:46:39.303 に答える