要獲得兩種類型的訪問,您需要將兩個容器合併在一起......或重新使用爲您合併容器的庫。
Boost.MultiIndex是爲了這種需求而發明的。
basics page顯示了一個員工可通過id訪問(唯一)並按名稱(非唯一)進行訪問的示例,這非常符合您的需求。
關鍵提取器可能並不明顯。假設你的線程ressemble:
class Thread {
public:
std::size_t id() const;
std::size_t priority() const;
...
};
你應該能夠編寫:
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/const_mem_fun.hpp>
#include <boost/multi_index/member.hpp>
// define a multiply indexed set with indices by id and name
typedef multi_index_container<
Thread,
indexed_by<
ordered_unique<
const_mem_fun<Thread, std::size_t, &Thread::id>
>,
ordered_non_unique<
const_mem_fun<Thread, std::size_t, &Thread::priority>
>
>
> ThreadContainer;
它定義了自己的id()
唯一標識,並根據他們的priority()
分揀線的容器。
我鼓勵你玩各種指標。此外,如果您向朋友提供訪問您的班級或特定獲得者返回可變引用的權限,則使用mem_fun
而不是const_mem_fun
,您將能夠更新您的對象(例如,更改其優先級)。
這是一個非常完整的(如果令人生畏的)庫。
你有兩種不同的用法,一種是你想查找某個特定的線程,另一種是你想要以特定的順序遍歷所有的東西? – 2012-04-23 07:13:35