4

ブースト unordered_multimap で一意のキーをループする最も簡単な方法は何ですか?

たとえば、私はこれを持っています:

std::set<int> used;
for (auto p : valuesMap)
{
    if (used.count(p.first))
        continue;
    used.insert(p.first);

    auto range = valuesMap.equal_range(p.first);
    if (p.first)
    for (auto v = range.first; v != range.second; ++v)
        //do something;
}

それを行うより良い方法はありますか。一意のキーは、順序付けられていないマップに既に知られているはずです。

4

1 に答える 1

6

やりたいことは、特定のキーに続くイテレータを取得する方法を見つけることです。でmultimap私は通常使用しますupper_bound。しかし、それunordered_multimapがないので、使用する必要がありますequal_range.second

for (auto iter=valueMap.begin();
     iter!=valueMap.end();
     iter=ValueMap.equal_range(iter->first)->second){
  uniq_key=iter->first;
  // Do whatever you want with uniq_key
}

しかし、あなたの例は私には奇妙です-あなたはすべての要素を調べているからです。私があなたのコードを書きたいとしたら、あなたがしていることをやって、これは私がそれをする方法です:

for (auto iter=valueMap.begin()
     iter!=valueMap.end();
     ){ // Notice the lack of ++iter!!!
  auto end=valueMap.equal_range(ier->first)->second;
  for (;iter!=end;++iter)
    // Do something
}
于 2013-10-31T20:54:40.093 に答える