容器的使用(关联容器set)

红黑树:二叉排序树

特点:每一个元素插入进去之后要进行自平衡排序

set

multiset

template<typename Container>
void Show(Container& con)
{
	copy(con.begin(), con.end(),
		ostream_iterator<typename Container::value_type>(cout, " "));
	cout << endl;
}

int main()
{
	set<int> st1;
	int arr[] = { 44, 45, 64, 6, 2, 1, 465, 4 };
	int len = sizeof(arr) / sizeof(arr[0]);
	set<int> st2(arr, arr + len);
	
	st2.insert(10);
	st2.insert(st2.begin(), 20);

	st2.erase(20);
	st2.erase(st2.begin());
	//st2.clear();
	//Show(st2);

	st1.insert(1);
	st1.insert(1);
	//Show(st1);//set为单重集合,不允许重复插入

	multiset<int> mst1;
	mst1.insert(1);
	mst1.insert(1);
	//Show(mst1);

	set<int>::iterator sit = find(st2.begin(), st2.end(), 6);
	if (sit != st2.end())
	{
		st2.insert(sit,444);
	}
	Show(st2);
	return 0;
}
//set集合里存的数据一定要能排序(比较大小),否则建树过程将会失败
class Friend
{
public:
	Friend(string name = "", int id = 0)
		:mname(name), mid(id)
	{}
	bool operator<(const Friend& rhs)const
	{
		return mid < rhs.mid;
	}
private:
	friend ostream& operator<<(ostream& out, const Friend& rhs);
	string mname;
	int mid;
};
ostream& operator<<(ostream& out, const Friend& rhs)
{
	out << rhs.mname << " ";
	out << rhs.mid << " ";
	return out;
}
class FriendList//朋友圈类
{
public:
	void addFriend(Friend& f)
	{
		myset.insert(f);
	}
	void delFriend(Friend& f)
	{
		myset.erase(f);
	}
	void showFriend()//查看朋友 相当于遍历整个容器  
	{
		copy(myset.begin(), myset.end(), ostream_iterator<Friend>(cout, "...."));
	}
private:
	set<Friend> myset;
	//set<Friend,greater<Friend>()> myset;//降序排序,要提供>比较
};
int main()
{
	Friend f1("zzg", 1);
	Friend f2("sbg", 2);
	Friend f3("gpg", 3);
	FriendList flist;
	flist.addFriend(f1);
	flist.addFriend(f2);
	flist.addFriend(f3);

	flist.showFriend();
	cout << endl;
	flist.delFriend(f1);
	flist.showFriend();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Aspiration_1314/article/details/88379719