0

次の順序付けられていないマルチマップがあります。

std::tr1::unordered_multimap<unsigned int, unsigned int > duplicates;

そして、私は使用してキーの値を取得しようとします

std::pair<std::tr1::unordered_multimap<unsigned int, unsigned int>,std::tr1::unordered_multimap<unsigned int, unsigned int> > range = duplicates.equal_range(id);

次に、for ループを使用して複数の結果を取得します。

for (std::tr1::unordered_multimap<unsigned int, unsigned int>::iterator it=range.first; it!=range.second; ++it)

しかし、次のエラーが表示されます。

ref_impl/core.cpp:306:84: error: conversion from 'std::tr1::unordered_multimap<unsigned int, unsigned int>' to non-scalar type 'std::tr1::_Hashtable<unsigned int, std::pair<const unsigned int, unsigned int>, std::allocator<std::pair<const unsigned int, unsigned int> >, std::_Select1st<std::pair<const unsigned int, unsigned int> >, std::equal_to<unsigned int>, std::tr1::hash<unsigned int>, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, false>::iterator {aka std::tr1::__detail::_Hashtable_iterator<std::pair<const unsigned int, unsigned int>, false, false>}' requested
ref_impl/core.cpp:306:101: error: no match for 'operator!=' in 'it != range.std::pair<std::tr1::unordered_multimap<unsigned int, unsigned int>, std::tr1::unordered_multimap<unsigned int, unsigned int> >::second'

助言がありますか?

4

2 に答える 2

3

unordered_multimap::equal_rangeのペアではなく、イテレータのペアを返しますunordered_multimap。2行目を次のように変更すると、すべてが機能するはずです。

typedef std::tr1::unordered_multimap<unsigned int, unsigned int>::iterator iterator;
std::pair<iterator, iterator> range = duplicates.equal_range(id);
于 2013-03-16T02:19:41.443 に答える
1

range順序付けされていないマップイテレータではなく、順序付けされていないマップのペアとして宣言しました。自動車を神に感謝します。使えなくてもよろしいですか?それはあなたの人生をとても楽にするでしょう:

auto range = duplicates.equal_range(id);

それ以外の場合は、を自由に使用する必要がありtypedefます。

于 2013-03-16T02:18:41.637 に答える