Tôi muốn xóa phần tử khỏi hàng đợi với giá trị cụ thể. Làm thế nào để làm điều đó? (Tôi cố gắng để tạo ra một hỗn hợp đồng thời của bản đồ và hàng đợi và hiện nay tôi cố gắng thực hiện trên this answer)Có thể xóa phần tử hàng đợi theo giá trị không?
Vì vậy, tôi hiện đang có mã ví dụ:
#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
Vì vậy, những gì tôi sẽ làm gì? Làm thế nào để loại bỏ khỏi hàng đợi theo giá trị? Hoặc thare là bất kỳ thành phần STL hoặc Boost nào giống như hàng đợi? Có nghĩa là nó sẽ có .front()
, pop_front();
và push_back(key);
và cũng hỗ trợ tìm kiếm và xóa theo giá trị?
Bạn có thể cụm từ câu hỏi của mình rõ ràng hơn và ngắn gọn hơn không? Hàng đợi không có "khóa", vì vậy câu hỏi của bạn không có ý nghĩa; đó là vùng chứa chuỗi chỉ có * giá trị *. –