码迷,mamicode.com
首页 > 其他好文 > 详细

set的常见用法

时间:2021-02-03 11:06:06      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:插入   erase   lan   mes   upper   判断   运算   name   素数   

set的常见用法

#include <set>
set<int> st;
set<int>::iterator it; //迭代器
st.insert(int); //插入一个值
st.erase(int); // 删除一个值
st.erase(iterator); //删除迭代器指向的值  
st.erase(iterator, iterator); //删除两迭代器之间的值
st.begin(); //返回指向第一个元素的迭代器
st.end(); //返回指向最后一个元素的迭代器
st.clear(); //清空
st.empty(); //判断是否为空
st.find(int); //返回第一个找到的某一值的迭代器
st.lower_bound(int); //返回大于等于某一值的第一个元素的迭代器
st.upper_bound(int); //返回大于某一值的第一个元素的迭代器
st.size(); //返回元素数量
#include <iostream>
#include <set>
using namespace std;
set<int> st;
int main() {
	while(true) {
		int opt; cin >> opt;
		if(opt == 1) {
			int x; cin >> x;
			st.insert(x);
		}
		if(opt == 2) {
			int x; cin >> x;
			st.erase(x);
		}
		if(opt == 3) {
			int x; cin >> x;
			set<int>::iterator p, q;
			p = st.lower_bound(x);
			q = st.upper_bound(x);
			cout << "lower :" << *p << "  upper : " << *q << endl;
		}
		if(opt == 4) {
			int x; cin >> x;
			set<int>::iterator p;
			p = st.find(x); cout << *p << endl;
		}
		if(opt == 5) {
			int x; cin >> x;
			cout << st.count(x) << endl;
		}
		if(opt == 6) {
			cout << "size: " << st.size() << endl;
		}
		set<int>::iterator it;
		cout << "--------- ";
		for(it = st.begin(); it != st.end(); it++) {
			cout << (*it) << " ";
		}
		cout << " ---------";
		cout << endl;
	}
}

set中重载运算符

#include <iostream>
#include <set>
using namespace std;
struct node {
	int fr, se;
};
node makenode(int x, int y) {
	node tmp; tmp.fr = x, tmp.se = y;
	return tmp;
}
bool operator < (const node a, const node b) {
	if(a.fr == b.fr) return a.se > b.se;
	return a.fr > b.fr; //降序,以fr为第一关键字,se为第二关键字
}
bool operator == (const node a, const node b) { //用于st.find()
	if(a.fr == b.fr) return true;
	else return false;
}
set<node> st;
int main() {
	int tot = 0;
	while(true) {
		int opt; cin >> opt; ++tot;
		if(opt == 1) {
			int x; cin >> x;
			st.insert(makenode(x, tot));
		}
		if(opt == 2) {
			int x; cin >> x;
			set<node>::iterator p = st.find(makenode(x, x));
			st.erase(p);
		}
		set<node>::iterator it;
		cout << "---------" << endl;
		for(it = st.begin(); it != st.end(); it++) {
			cout << (*it).fr << " " << (*it).se << endl;
		}
		cout << endl << "---------" << endl;
	}
}

set的常见用法

标签:插入   erase   lan   mes   upper   判断   运算   name   素数   

原文地址:https://www.cnblogs.com/mcggvc/p/14364945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!