1.set
set的结构体重载以及内部成员访问。
struct node {int a,b;bool friend operator <(node n1,node n2) {return n1.a < n2.a;}
};
set<node>nset;
int main() {for (int i = 0; i < 10; i++) nset.insert({100-i,i});for (auto it = nset.begin(); it != nset.end(); it++)cout << it->a << " " << it->b << endl;return 0;
}
对于结构体的成员访问需要使用 it->a ,但是对于set<int>这样的容器元素访问,就需要*it。
set<int>iset;
int main() {for (int i = 0; i < 10; i++)iset.insert(20 - i);iset.erase(15); //删除元素if (iset.find(15) == iset.end())cout << "15 is deleted!" << endl; //查找元素for (auto it = iset.begin(); it != iset.end(); it++)cout << *it << endl;return 0;
}
什么时候用得到set以及其重载:
(1)含负数的不重复统计时使用,如果数据较小且全部为正数时,直接使用数组统计。
(2)结构体查找时使用,经测试,1e6的数据量查找一次几乎不花时间。P.S.结构体查找时lower_bound不可用。
注意:(1)set<int>插入1e5次就需要1.4秒,必然超时,插入1e4次需要138毫秒,最多插入1e4次,而且是单int变量,可见适用范围并不广。