我預計std::set
的順序與std::list
或std::vector
一致,只是值不會被第二次附加。 MSVC 110證明我錯了。我希望下面的代碼如下所示的結果產量,上運行ideone(http://ideone.com/e47GwQ)代碼時(不知道他們使用的編譯器和版本,雖然)這是這樣的。在std :: set中的順序和std :: unordered_set的區別
#include <iostream>
#include <set>
template <typename C>
int insert_get_index(C& container, typename C::value_type value)
{
typename C::iterator it = container.insert(value).first;
return std::distance(container.begin(), it);
}
int main()
{
int a = 3, b = 1, c = 9;
std::set<int*> set;
std::cout << insert_get_index(set, &a) << "\n";
std::cout << insert_get_index(set, &b) << "\n";
std::cout << insert_get_index(set, &c) << "\n";
std::cout << insert_get_index(set, &a) << "\n";
std::cout << insert_get_index(set, &b) << "\n";
std::cout << insert_get_index(set, &c) << "\n";
return 0;
}
0
1
2
0
1
2
運行在Visual Studio 2012的代碼產生你可以看到下面的東西。
0
0
2
1
0
2
現在,爲什麼我減薄std::set
的行爲如上所述?因爲cplusplus.com聲明
集合是容器,它按照特定順序存儲唯一元素。
另外還有std::unordered_set
。
- 我沒有理解錯誤的文件和
std::set
反而值排序? - ,什麼是
std::unordered_set
的呢? - 是否有不同的標準庫的容器,滿足我的要求嗎?
「是否有不同的標準庫容器滿足我的要求?」 - 你有什麼要求? – 2014-09-18 16:52:46
@MikeSeymour如上所述,我期望'std :: set'保持插入值的順序,但只插入一次。這是我的要求。 – 2014-09-18 16:53:17
'std :: set'是一個通常用紅黑樹實現的有序關聯容器。 – 2014-09-18 16:53:35