红黑树:二叉排序树
特点:每一个元素插入进去之后要进行自平衡排序
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;
}