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

原创 2012年03月29日 20:52:50

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

#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;
}

测试结果:


C++中关于set的自定义排序函数的书写

大概有两个月没用过C++啦,手都变得很生了,在这里,在这里我想扯一下关于set的比较函数的定义,我想,应该有不少人对这个东西感到头疼吧!如果说我想在set里面添加一个自定义的类型,比如说下面的结构体:...

C++容器学习,与结构体排序和set来一场邂逅

最近学习C++容器,积累一下。下面介绍set和multiset,并使用sort对结构体进行排序。C++之路漫漫其修远兮...

C++ STL set::find的用法

上次面阿里巴巴。面试官问了我这样一个问题,“C++ STL中的set是如何实现的”。当时只答了二叉树,回来查下书,原来一般是红黑树,后悔没好好记住啊。。。 接着,面试官又考了我一道这样的编程题:定义一...
  • lihao21
  • lihao21
  • 2011年04月04日 23:06
  • 48026

C# HashSet集合类型使用介绍

C#的HashSet很少被使用的集合类型的一些被常用到的方法。
  • Scalzdp
  • Scalzdp
  • 2014年05月28日 17:00
  • 16346

C++实现的字符串模糊匹配

C++基本没有正则表达式功能,当然像Boost里提供了正则。本文来源于博客园园友的一篇文章,请看: C/C++ 字符串模糊匹配 很早之前就看过这篇文章,原作者的需求很明确、代码实现也很好。 之所...

STL 之sort函数结构体排序

当借助结构体来存储某一特定元素时,可能会遇到结构体排序问题,指定结构体中某一元素,或者某几个元素的运算数值当作排序规则 可以直接借助C++里STL中的快排函数sort(a,a+b,cmp) sor...

指定结构体排序字段的STL实现版本(C++ 2011系列)

// c2011.cpp : 定义控制台应用程序的入口点。 // //#include "stdafx.h" #include #include //#include #include #in...
  • hzhxxx
  • hzhxxx
  • 2011年09月09日 15:57
  • 1067

STL list查找、删除、结构体实例化对象排序

#include #include #include #include #include #include using namespace std; typedef struct _tagFMI...
  • lclwjl
  • lclwjl
  • 2014年06月11日 09:52
  • 664

STL 结构体排序及查找 使用sort及find_if

//网上大多例子都只是基本数据类型,或者简单的只有一个成员的进行排序的例子或者查找的例子. struct MY_NODE  {     int x;     int y;      //大小比较,这里...

sort函数对数组、容器以及结构体的排序(for sort)

排序是程序设计应用最广泛的算法之一,所以学好排序的重要性,你懂的! 关于排序自己会用的不多,先在这里做个小结! 首先,sort函数可以对数组和结构体进行排序,还是用实例说话吧!一句话,都在代码里!...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL的set容器如何存放结构体?根据什么排序?
举报原因:
原因补充:

(最多只允许输入30个字)