Untitled
unknown
c_cpp
2 years ago
2.2 kB
10
Indexable
#include <iostream>
#include <set>
using namespace std;
/*
add/remove/contains O(log n)
iterator O(1)
iterator::for O(m)
m為snapahot時元素個數
call 了 interator() 后,只能iterator element by that time, 新的添加的remove 不会影响interator result!!!!!!!!!!!!
*/
template <typename T>
class SnapshotSet {
public:
void add(T e);
void remove(T e);
bool contains(T e);
set<T> myiterator(); // not efficient
private:
set<T> myset;
};
template <typename T>
void SnapshotSet<T>::add(T e){
myset.insert(e);
}
template <typename T>
void SnapshotSet<T>::remove(T e){
myset.erase(e);
}
template <typename T>
bool SnapshotSet<T>::contains(T e){
return myset.find(e) != myset.end();
}
template <typename T>
set<T> SnapshotSet<T>::myiterator(){
set<T> copy = myset;
return copy;
}
int main() {
SnapshotSet<int> intSet;
intSet.add(5);
intSet.add(2);
intSet.add(8);
intSet.remove(5);
auto it = intSet.myiterator();
intSet.add(1);
cout << intSet.contains(2) << endl; // true
intSet.remove(2);
cout << intSet.contains(2) << endl; // false
// traverse iterator
for(auto a : it){
cout << a << " ";
}
return 0;
}
/*
template <typename T>
class SnapshotSet {
public:
void add(T e);
void remove(T e);
bool contains(T e);
// iterator* iterator();
typename set<T>::iterator begin() {
return myset.begin();
}
typename set<T>::iterator end() {
return myset.end();
}
private:
set<T> myset;
};
template <typename T>
void SnapshotSet<T>::add(T e){
myset.insert(e);
}
template <typename T>
void SnapshotSet<T>::remove(T e){
myset.erase(e);
}
template <typename T>
bool SnapshotSet<T>::contains(T e){
return myset.find(e) != myset.end();
}
int main() {
SnapshotSet<int> intSet;
intSet.add(5);
intSet.add(2);
intSet.add(8);
intSet.remove(5);
auto it1 = iterator();
intSet.add(1);
cout << intSet.contains(2) << endl; // true
intSet.remove(2);
cout << intSet.contains(2) << endl; // false
// traverse iterator
for(auto it1 = intSet.begin(); it != intSet.end(); ++it){
cout << *it << " ";
}
return 0;
}
*/
Editor is loading...