我需要一个具有多个值的键.你会推荐什么样的数据结构?

irl*_*irl 12 c++ key data-structures

我有一个字符串数组,里面填充了句子中的单词.

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."
Run Code Online (Sandbox Code Playgroud)

等(愚蠢的例子,但它适用于此)

每个单词都是一个键,它的后续单词就是它的值.所以"over"=>"the".某些键可以有多个值.例如,"the"=>"dog"|| "墙"|| "猫"|| "屋".该值是从该密钥的值中随机选择的.

当程序运行时,它会随机选择一个单词并生成一个句子.所以它可能是这样的:"猫掉了狗".

我尝试实现一个map(map myMap;),但是每个键只允许一个值(我认为).

希望我解释得对.

dir*_*tly 30

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;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 STL 中的 multimap 并使用调用

pair<iterator, iterator> equal_range(const key_type& k)
Run Code Online (Sandbox Code Playgroud)

获取一系列与您的键匹配的迭代器

我个人觉得这有点笨拙,因为必须处理迭代器范围,而不仅仅是取回一个代表该键的所有值的对象。为了解决这个问题,您还可以在常规地图中存储一个向量并将您的字符串添加到该向量中。


Lar*_*abe 5

如果您使用的是C ++,则只需创建一个类来表示您的键/值对:

Class foo {
    key : String
    values : list of values
}
Run Code Online (Sandbox Code Playgroud)

然后,创建一个将每个键映射到包含其值的对象的映射。

这是简单,可扩展的,并且可以用任何OO语言完成。

抱歉,我的C ++生锈,因此语法错误,但是基本思想很简单。