Можно ли удалить элемент очереди по значению?

Я хочу удалить элемент из очереди с определенным значением. Как это сделать? (Я пытаюсь создать одновременную смесь карты и очереди, и в настоящее время пытаюсь реализовать на этот ответ )

Итак, в настоящее время у меня есть такой код:

#ifndef CONCURRENT_QUEUED_MAP_H
#define CONCURRENT_QUEUED_MAP_H

#include 
#include 
#include 
#include 

template 
class concurrent_queued_map
{
private:
    std::map _ds;
    std::deque _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(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

Итак, что мне делать? Как удалить из очереди по значению? Или есть какой-либо компонент STL или Boost, похожий на очередь? Это значит, что он будет иметь .front () , pop_front (); и push_back (key); , а также поддерживать поиск и стирание по значению?

7
задан Community 23 May 2017 в 12:26
поделиться