2種類のアクセスを取得するには、2つのコンテナを組み合わせるか、コンテナを組み合わせたライブラリを再利用する必要があります。
Boost.MultiIndex正確にこの種のニーズが発明されました。
basics pageには、従業員がid(ユニーク)でアクセス可能で、名前でソートされている(一意でない)例があります。
鍵エクストラクタはおそらく明らかではありません。あなたが書くことができるはず
class Thread {
public:
std::size_t id() const;
std::size_t priority() const;
...
};
:一意にid()
によって識別され、そのpriority()
に従ってソートスレッドのコンテナを定義し
#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;
あなたのスレッドressembleとすると。
さまざまなインデックスで遊ぶことをお勧めします。また、クラスへのフレンドアクセスや、可変参照を返す特定のgetterを提供する場合は、const_mem_fun
の代わりにmem_fun
を使用すると、オブジェクトを適切に更新(たとえば、優先度の変更など)することができます。
非常に完全な(難しい場合は)ライブラリです。
2つの異なる用途、特定のスレッドを検索する場所、特定の順序ですべてをループする場所がありますか? –