2

私たちが定着させてきたすべての価値観を見ることができるかどうかを見たいと思います。例えば:

#include <iostream>
#include <unordered_map>

using namespace std;


int main () {
    unordered_multimap<string,int> hash;

    hash.emplace("Hello", 12);
    hash.emplace("World", 22);
    hash.emplace("Wofh", 25);
    for (int i = 1; i < 10; i++) {
        hash.emplace("Wofh", i);
    }
    cout << "Hello " << hash.find("Hello")->second << endl;
    cout << "Wofh " << hash.count("Wofh") << endl;
    cout << "Wofh " << hash.find("Wofh")->second << endl;

    return 0;
}

出力は次のとおりです。

$ ./stlhash
Hello 12
Wofh 10
Wofh 9

一方、最後の行に 25,1,2... から 9 を表示したいのですが、最初は値であり、2 番目は対応する値であるため、ポインタのみfindを取得するようです。これを行う方法はありますか?firstsecond

4

1 に答える 1

3

必要な操作はequal_rangeと呼ばれます

cplusplus.com の例:

// unordered_multimap::equal_range
#include <iostream>
#include <string>
#include <unordered_map>
#include <algorithm>

typedef std::unordered_multimap<std::string,std::string> stringmap;

int main ()
{
  stringmap myumm = {
     {"orange","FL"},
     {"strawberry","LA"},
     {"strawberry","OK"},
     {"pumpkin","NH"}
  };

  std::cout << "Entries with strawberry:";
  auto range = myumm.equal_range("strawberry");
  for_each (
    range.first,
    range.second,
    [](stringmap::value_type& x){std::cout << " " << x.second;}
  );

  return 0;
}
于 2013-07-15T17:24:16.093 に答える