, , std::set * std::queue, , .
template <typename T>
class QueueUnique {
public:
void push(T t) {
if (set_.insert(t).second) {
queue_.push(std::move(t));
}
}
T& front() { return queue_.front(); }
T& back() { return queue_.back(); }
typename std::set<T>::size_type size() { return set_.size(); }
private:
std::set<T> set_;
std::queue<T> queue_;
};
:
QueueUnique<int> q;
q.push(1);
q.push(1);
q.push(2);
q.push(3);
q.push(1);
std::cout << "Size: " << q.size() << std::endl;
std::cout << "Front: " << q.front() << std::endl;
std::cout << "Back: " << q.back() << std::endl;
< > * : std::set , < .
>