web-dev-qa-db-ja.com

map <string、string>このマップにデータを挿入する方法は?

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

#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);
13
bjskishore123

#include <string>どこかに。

37

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

#include<string>

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

7
Daren Thomas

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

2
tdammers

これがマップを設定する方法です<...、...>

static std::map<std::string, RequestTypes> requestTypesMap = {
   { "order",       RequestTypes::ORDER       },
   { "subscribe",   RequestTypes::SUBSCRIBE   },
   { "unsubscribe", RequestTypes::UNSUBSCRIBE }
};
2
Alexey Tkach

文字列をキー値形式で格納する方法はいくつかあります。

m["key1"] = "val1";
m.insert(pair<string,string>("key2", "val2"));
m.insert({"key3", "val3"}); // c++11

そして、それをc ++ 11でトラバースします。

for( auto it = m.begin(); it != m.end(); ++it )
{
  cout << it->first; // key
  string& value = it->second;
  cout << ":" << value << endl;
}
2
TadejP

<map>には<string>は含まれていませんが、<xstring>は含まれているためです。要素をマップに追加するときは、並べ替えによってマップ内の正しい位置を見つける必要があります。ソート時に、mapはoperator <の検索を試み、そこから新しい要素の正しい場所を見つけます。ただし、operator <の文字列の定義には<xstring>がないため、エラーメッセージが表示されます。

1
Default