簡體   English   中英

STL套地圖迭代器

[英]STL set of map iterators

我有一個stl unordered_map,我想在該地圖中存儲對元素的引用。 我希望沒有重復的引用。 我以為我可以創建一組指向元素的迭代器。 對於一個我不確定它是否可以識別,但是即使如此,我仍然遇到了一些很長的模板錯誤,我認為這歸結為沒有針對迭代器的比較運算符<。

然后,我嘗試使用g ++ -std = c ++ 0x進行無序編譯,但出現錯誤頁面。

我怎樣才能實現這個目標?

#include <set>
#include <unordered_map>
#include <unordered_set>

int main() {

  typedef std::unordered_map<int, float> umap;
  umap my_map;

  umap::const_iterator itr;
  for (int i=0;i<10000000;i++) {
    my_map[i] = float(i);
  }

 umap::iterator my_it1 = my_map.find(43);
 umap::iterator my_it2 = my_map.find(44);
 umap::iterator my_it3 = my_map.find(44);


 std::unordered_set<umap::iterator> my_its;
 my_its.insert(my_it1); 
 my_its.insert(my_it2);
 my_its.insert(my_it3);

 return 0;
}

由於您嘗試將迭代器存儲在無序集中,因此不需要比較運算符,而需要哈希函數。

我猜,由於每個不同的迭代器都指向一個不同的鍵,因此您可以使用鍵的哈希值對迭代器進行哈希處理。

struct iterator_hash
{
    size_t operator()(std::unordered_map<int, float>::const_iterator it) const 
    { 
        return std::hash<int>()(it->first); 
    }
};

並將無序集實例化為:

std::unordered_set<umap::iterator, iterator_hash> my_its;

unordered_set還需要一個相等函數,但是只要所有迭代器都屬於同一個unordered_map ,迭代器自己的operator==就可以了。

小心迭代器無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM