15

文の単語で満たされた文字列配列があります。

words[0] = "the"
words[1] = "dog"
words[2] = "jumped"
words[3] = "over"
words[4] = "the"
words[5] = "wall."
words[6] = "the"
words[7] = "cat"
words[8] = "fell"
words[9] = "off"
words[10] = "the"
words[10] = "house."

など(愚かな例ですが、これで機能します)

各単語は、次の単語を値とするキーになります。だから「上」=>「その」。一部のキーは複数の値を持つことができます。たとえば、"the" => "犬" || "壁" || "壁" || 「猫」|| "家"。値は、そのキーの値からランダムに選択されます。

プログラムが実行されると、単語がランダムに選択され、文が作成されます。「猫が犬から落ちた」のようなものかもしれません。

マップ (map myMap;) を実装しようとしましたが、これはキーごとに 1 つの値しか許可しません (と思います)。

私がこれを正しく説明したことを願っています。

4

7 に答える 7

37

std::multimap

リンクは優れた例を提供します。以下引用:

 int main()
{
  multimap<const char*, int, ltstr> m;

  m.insert(pair<const char* const, int>("a", 1));
  m.insert(pair<const char* const, int>("c", 2));
  m.insert(pair<const char* const, int>("b", 3));
  m.insert(pair<const char* const, int>("b", 4));
  m.insert(pair<const char* const, int>("a", 5));
  m.insert(pair<const char* const, int>("b", 6));

  cout << "Number of elements with key a: " << m.count("a") << endl;
  cout << "Number of elements with key b: " << m.count("b") << endl;
  cout << "Number of elements with key c: " << m.count("c") << endl;

  cout << "Elements in m: " << endl;
  for (multimap<const char*, int, ltstr>::iterator it = m.begin();
       it != m.end();
       ++it)
   cout << "  [" << (*it).first << ", " << (*it).second << "]" << endl;
}
于 2009-03-30T18:10:18.667 に答える
7

C++ を使用している場合は、キーと値のペアを表すクラスを作成するだけです。

Class foo {
    key : String
    values : list of values
}

次に、各キーをその値を含むオブジェクトにマップするマップを作成します。

これはシンプルで拡張可能で、あらゆる OO 言語で実行できます。

申し訳ありませんが、私の C++ は錆びているため、構文が間違っていますが、本質的な考え方は簡単です。

于 2009-06-15T20:27:34.487 に答える
6

STL からマルチマップを使用し、呼び出しを使用できます

pair<iterator, iterator> equal_range(const key_type& k)

キーに一致するイテレータの範囲を取得する

個人的には、そのキーのすべての値を表すオブジェクトを取得するだけでなく、反復子の範囲を処理する必要があるため、これは少し扱いに​​くいと思います。これを回避するには、ベクターを通常のマップに保存し、文字列をベクターに追加することもできます。

于 2009-03-30T19:02:44.937 に答える
0

他の2人が指摘したように、std::multimapあなたの解決策になる可能性があります。

std::tr1::unordered_multimapも考慮してください。VS 2008持っているようGCCで、少なくともバージョンから入手できます4.3

于 2009-03-30T18:13:07.770 に答える