Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;hash_multimap如何获取值_C++_Hash_Multimap - Fatal编程技术网

C++ c++;hash_multimap如何获取值

C++ c++;hash_multimap如何获取值,c++,hash,multimap,C++,Hash,Multimap,这可能真的很简单,但我找不到一个简单的例子。 我知道使用hash_multimap可以将多个值映射到一个键。但我究竟该如何访问这些值呢。我偶然发现的所有示例总是只访问映射到键的第一个值。这是我的意思的一个例子 key : value 1 : obj1a; 2 : obj2a, obj2b, obj2c 如何访问obj2b和obj2c,而不仅仅是obj2a,只需获取第一个迭代器的迭代器并将其递增即可。如果两个键仍然相等,则有另一个具有相同键值的条目。您也可以使用。只需获取第一个迭代器的迭代器并将

这可能真的很简单,但我找不到一个简单的例子。 我知道使用hash_multimap可以将多个值映射到一个键。但我究竟该如何访问这些值呢。我偶然发现的所有示例总是只访问映射到键的第一个值。这是我的意思的一个例子

key : value
1 : obj1a;
2 : obj2a, obj2b, obj2c

如何访问obj2b和obj2c,而不仅仅是obj2a,只需获取第一个迭代器的迭代器并将其递增即可。如果两个键仍然相等,则有另一个具有相同键值的条目。您也可以使用。

只需获取第一个迭代器的迭代器并将其递增即可。如果两个键仍然相等,则有另一个具有相同键值的条目。您还可以使用。

例如,
equal_range
返回两个迭代器,分别位于匹配范围的开始和结束处:

void lookup(const map_type& Map, int key)
{
  cout << key << ": ";
  pair<map_type::const_iterator, map_type::const_iterator> p =
    Map.equal_range(key);

  for (map_type::const_iterator i = p.first; i != p.second; ++i)
    cout << (*i).second << " ";

  cout << endl;
}

例如,
equal_range
返回两个迭代器,分别位于匹配范围的开始和结束处:

void lookup(const map_type& Map, int key)
{
  cout << key << ": ";
  pair<map_type::const_iterator, map_type::const_iterator> p =
    Map.equal_range(key);

  for (map_type::const_iterator i = p.first; i != p.second; ++i)
    cout << (*i).second << " ";

  cout << endl;
}

通常的多重映射迭代循环如下所示:

#include <unordered_multimap>

typedef std::unordered_multimap<K, V> mmap_t;

mmap_t m;

for (mmap_t::const_iterator it1 = m.begin(), it2 = it1, end = m.end(); it1 != end; it1 = it2)
{
    // outer loop over unique keys

    for ( ; it1->first == it2->first; ++it2)
    {
        // inner loop, all keys equal to it1->first
    }
}

通常的多重映射迭代循环如下所示:

#include <unordered_multimap>

typedef std::unordered_multimap<K, V> mmap_t;

mmap_t m;

for (mmap_t::const_iterator it1 = m.begin(), it2 = it1, end = m.end(); it1 != end; it1 = it2)
{
    // outer loop over unique keys

    for ( ; it1->first == it2->first; ++it2)
    {
        // inner loop, all keys equal to it1->first
    }
}