Boost.Container flat_set
Boost.Container flat_ [多]地圖/組容器有序向量基於基於Austern的和Alexandrescu的的準則關聯容器。這些有序的矢量容器最近也受益於向C++添加移動語義,大大加速了插入和刪除時間。平關聯容器具有以下屬性:
- 更快的查找比標準關聯容器比標準關聯容器
- 快得多迭代。
- 更少的內存消耗小物體(以及如果使用shrink_to_fit大對象)
- 改進高速緩存性能(數據存儲在連續的存儲器)
- 非穩定的迭代器(插入和擦除元素時的迭代器被無效)
- 不可複製和不可移動的值類型不能被存儲
- 比標準關聯容器
- 較慢插入和擦除比(複製/移動的構造可以在移位擦除值和插入時拋出)較弱異常安全標準聯想容器(專門爲不可移動型)
Live demo:
#include <boost/container/flat_set.hpp>
#include <iostream>
#include <ostream>
using namespace std;
int main()
{
boost::container::flat_set<int> s;
s.insert(1);
s.insert(2);
s.insert(3);
cout << (s.find(1)!=s.end()) << endl;
cout << (s.find(4)!=s.end()) << endl;
}
jalf:如果你想有一個排序的載體,它很可能更好地插入的所有元素,然後在插入後調用std :: sort()一次。
boost::flat_set可以做到這一點自動:
template<typename InputIterator>
flat_set(InputIterator first, InputIterator last,
const Compare & comp = Compare(),
const allocator_type & a = allocator_type());
影響:構造使用指定的比較對象和分配器空集,並從範圍[插入元件第一,最後一個) 。
複雜: - 第一線性的N如果範圍[第一,最後一個)是利用補償否則N *日誌(N),其中N是最後已排序。
你可能會更具體瞭解std :: set的效率不夠高嗎? – KillianDS 2010-04-25 22:28:54
如果您擁有數十萬個僅包含10個左右成員的小集,那麼只需使用排序向量就可以提高內存效率。 – Frank 2010-04-25 22:31:47
我不認爲這是一個現成的課程。你可以編寫自己的代碼,或者使用'lower_bound()'來插入,''binary_search()'用於查找。 – doublep 2010-04-25 22:36:45