c++ map value_comp 的用法,举例说明,谢谢!

如题所述

C++中的map::value_comp()原型是:
value_compare value_comp ( ) const;
返回值是一个比较类的对象,这个类是map::value_compare,并且是map的一个内部类。
返回的这个对象可以用来通过比较两个元素的value来判决它们对应的key在map的位置谁在前面谁在后面。

下面是一个简单的例子,看一下就会更明白了:
#include <iostream>
#include <map>
using namespace std;

int main ()
{
map<char,int> mymap;
map<char,int>::iterator it;
pair<char,int> highest;

mymap['x']=1001;
mymap['y']=2002;
mymap['z']=3003;

cout << "mymap contains:\n";

highest=*mymap.rbegin(); // last element

it=mymap.begin();
do {
cout << (*it).first << " => " << (*it).second << endl;
} while ( mymap.value_comp()(*it++, highest) );

return 0;
}
输出结果:
mymap contains:
x => 1001
y => 2002
z => 3003

解释一下,上面语句while里面的mymap.value_comp()(*it++, highest)在这样的条件下会返回true:
*it++对应的key在map中排在highest对应的key的前面时。

因此,可以认为进行了一个内部的排序。

希望对你有所帮助:)
温馨提示:内容为网友见解,仅供参考
无其他回答

c++ map value_comp 的用法,举例说明,谢谢!
C++中的map::value_comp()原型是:value_compare value_comp ( ) const;其返回值是一个比较类的对象,这个类是map::value_compare,并且是map的一个内部类。返回的这个对象可以用来通过比较两个元素的value来判决它们对应的key在map的位置谁在前面谁在后面。下面是一个简单的例子,看一下就会更明白...

关于C++ STL里面的map 今天见的代码(见问题补充)为什么开始就能判断...
mapped_type())); return ((*_Where).second); } 首先,会在map查找这个键值的项,map如果不包含某个键值,会返回map的end,然后它发现此键值没有找到(_Where == this->end())的话,会自动在末尾插入(this->insert(_Where)一个以你输入的键值和value的默认值(mapped_type())构成的...

c++ 输出map每个元素的值
usingnamespacestd;intmain(){ multimap<string,int>m_map;strings("中国"),s1("美国");m_map.insert(make_pair(s,50));m_map.insert(make_pair(s,55));m_map.insert(make_pair(s,60));m_map.insert(make_pair(s1,30));m_map.insert(make_pair(s1,20));m_map.insert(make_pair...

c++ map问题:如何指向map中最后一个元素?
7, map的基本操作函数:C++ Maps是一种关联式容器,包含“关键字\/值”对begin() 返回指向map头部的迭代器clear() 删除所有元素count() 返回指定元素出现的次数empty() 如果map为空则返回trueend() 返回指向map末尾的迭代器equal_range() 返回特殊条目的迭代器对erase() 删...

【C++】sort函数使用方法
一.sort函数 sort函数是C++标准库中的排序方法,无需关心其内部实现。该函数模板包含三个参数:first(排序数组起始地址),last(数组结束地址,即最后一个数据的后一个数据的地址)和comp(排序方法,支持升序或降序,默认从小到大排序)。二.实例 sort函数默认从小到大排序,实例为sort(a,a+10)。

map中的key为结构体时,怎么find?
map<S, int > ms;int main() { ms.insert(map<S, int >::value_type(S(31, 41), 59));S test(31, 59);if (ms.find(test) != ms.end()) { cout << "Find the value: " << ms[test] << endl;} else { cout << "Find Failure\/n" ;} return 0;} 使用 VC++6.0...

...<int>::iterator it = a.begin(); it != a.end(); ++it
max_size() 返回可以容纳的最大元素个数 rbegin() 返回一个指向map尾部的逆向迭代器 rend() 返回一个指向map头部的逆向迭代器 size() 返回map中元素的个数 swap() 交换两个map upper_bound() 返回键值>给定元素的第一个位置 value_comp() 返回比较元素value的函数 ...

CityEngine建模及常用CGA函数详解
I:孤立选中对象 Alt+鼠标左键:旋转视图(默认)Q:选择对象 Ctrl+G:更新规则 Ctrl+F:打开“查找\/搜索-替换”对话框 关于视图操作,可以在编辑—首选项中进行自定义修改 基础建模函数:attr\/const 变量名 = 变量值:extrude(value) extrude(world.up,value):comp (f) { selector : ...

求一个用C++编过计算器的,就是那种加减乘除三角函数可以写一排算的...
\/\/***\/\/数学表达式解析类\/\/***\/\/Expression_Parser.cpp#include <stdio.h>#include <string.h>#include <math.h>const double PI=3.141592654;\/\/将角度转换成弧度double degTorad( double deg ){ return (2*PI*deg)\/360;}\/\/将中缀表达式转换为后缀表达式(逆波兰式)void trans( char a[...

模拟人生好玩吗怎么玩?
MAP_EDIT ON : 编辑地图开启MAP_EDIT OFF : 编辑地图关闭模拟人生无限升级法不知道大家有没有注意在第一次进《模拟人生》时,有一个教学关,它会教你一些基本的操作,你可以不按照它的去做,自己买升级所需的东西,然后猛升级,因为在你没按照它的要求做时,一切的卫生、饥饿等等都不会减少。爽吧,还不赶紧行动!

相似回答