关闭

STL的set容器如何存放结构体?根据什么排序?

标签: 测试
4392人阅读 评论(0) 收藏 举报
分类:

下面程序的输出结果是什么?为什么?

#include <iostream>
#include <vector>
#include <set>
using namespace std;

struct node
{
	char ch;
	int cost;
	node()
	{
		ch = '\0';
		cost = 0;
	}
	//把这个函数注释了,对整个程序没有任何影响
	bool operator == ( const node &rhs) const
	{
		return rhs.ch == ch;
	}
	//如果把这个程序注释了,将会出现一堆的错误,有关STL中的错误,是无法调试、无法修改的
	bool operator < (const node &rhs) const
	{
		return rhs.cost > cost;
	}
};


int main(int argc, char* argv[])
{
	node a, b;
	multiset<node> ms;
	ms.insert(a);
	ms.insert(b);

	set<node> s;
	s.insert(a);
	s.insert(b);

	cout <<"ms.size() = " << ms.size() << "\ns.size() = " <<  s.size() << endl;

	// 虽然我们重定义了==函数,但这是无用的,set只根据< 符号来做判断
	ms.clear();
	s.clear();
	a.ch = 'A';
	b.ch = 'B';
	s.insert(a);
	s.insert(b);
	ms.insert(a);
	ms.insert(b);
	cout <<"ms.size() = " << ms.size() << "\ns.size() = " <<  s.size() << endl;

	ms.clear();
	s.clear();
	a.ch = 'A';
	b.ch = 'A';
	a.cost = 2;
	b.cost = 1;
	s.insert(a);
	s.insert(b);
	ms.insert(a);
	ms.insert(b);
	cout <<"ms.size() = " << ms.size() << "\ns.size() = " <<  s.size() << endl;
	// 可以看到,set内部根据cost排序了
	cout <<"(*(s.begin())).cost = " << ( *(s.begin())).cost << endl;

	return 0;
}

测试结果:


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:710066次
    • 积分:7763
    • 等级:
    • 排名:第2688名
    • 原创:135篇
    • 转载:35篇
    • 译文:7篇
    • 评论:119条
    声明
    本博客乃学习笔记,没有纯粹无意义的转载。作者除了对自己负责,不对任何读者负责。欢迎指出文章错误,如果原意交朋友,可以通过Gmail联系我(mingxinglai#gmail.com),博客基本不再更新,欢迎访问我的独立博客http://mingxinglai.com
    文章分类
    最新评论