특정 값의 큐에서 요소를 제거하려고합니다. 그런 일을하는 방법? (나는지도와 큐의 동시 혼합물을 만들기 위해 노력하고 현재 나는 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);
이며 검색 및 값으로 지우기를 지원합니까?
질문을 좀 더 명확하고 간결하게 표현할 수 있습니까? 대기열에는 "키"가 없으므로 질문에 의미가 없습니다. * 값 *만을 가지는 시퀀스 컨테이너입니다. –