特定の値を持つキューから要素を削除したい。そんなことをする方法? (私はマップとキューの同時混合物を作成しようとしています。現在、私はthis answerに実装しよう)キュー要素を値で削除することはできますか?
だから私は現在、このようなコードを持っている:
#ifndef CONCURRENT_QUEUED_MAP_H
#define CONCURRENT_QUEUED_MAP_H
#include <map>
#include <deque>
#include <boost/thread.hpp>
#include <boost/thread/locks.hpp>
template <class map_t_1, class map_t_2>
class concurrent_queued_map
{
private:
std::map<map_t_1, map_t_2> _ds;
std::deque<map_t_1> _queue;
mutable boost::mutex mut_;
public:
concurrent_queued_map() {}
map_t_2 get(map_t_1 key) {
boost::mutex::scoped_lock lock(mut_);
return _ds[key];
}
map_t_1 put(map_t_1 key, map_t_2 value) {
boost::mutex::scoped_lock lock(mut_);
_ds.insert(std::pair<map_t_1, map_t_2>(key,value));
_queue.push_back(key);
return key;
}
map_t_2 get_last(map_t_1 key) {
boost::mutex::scoped_lock lock(mut_);
const map_t_1 k = _queue.front();
return _ds[k];
}
void remove_last(map_t_1 key) {
boost::mutex::scoped_lock lock(mut_);
const map_t_1 k = _queue.front();
_ds.erase(k);
_queue.pop_front();
}
void remove(map_t_1 key) {
boost::mutex::scoped_lock lock(mut_);
_queue.erase(std::remove(_queue.begin(), _queue.end(), key), _queue.end());
_ds.erase(k);
}
int size() {
boost::mutex::scoped_lock lock(mut_);
return _ds.size();
}
};
#endif // CONCURRENT_QUEUED_MAP_H
だから私はどうしたらよいのでしょうか値によってキューから削除するには?または、STARまたはBoostコンポーネントが同様のキューですか?つまり、.front()
,pop_front();
、push_back(key);
となり、値による検索と消去がサポートされますか?あなたは、その後、std::queue
アダプタを使用している場合
std::deque<T> q;
T val;
q.erase(std::remove(q.begin(), q.end(), val), q.end());
:あなただけの最高の削除/消去イディオムで行われ値によって要素を削除することができるように
質問をより明確かつ簡潔に表現できますか?キューには「キー」がありませんので、あなたの質問は意味をなさないでしょう。 *値*だけを持つシーケンスコンテナです。 –