c++标准库-C++标准库中,set容器的insert函数中的比较函数重写问题

问题描述

C++标准库中,set容器的insert函数中的比较函数重写问题

在**set **容器里我把它的其中的元素定义为map,然后我就不会写compare函数了。因此他的insert函数就跪了……求大神助……哭……

解决方案

#include

#include
using std::string;

#include
using std::map;

#include
using std::set;

#include
using std::make_pair;

#include
using std::size_t;

typedef bool(*Scomp) (const string &, const string&);

int main()
{

map<string,size_t, Scomp> S([](const string&a, const string&b)
{ return  b > a; }
);

S.insert(make_pair("a",1));
S.insert(make_pair("b",2));
S.insert(make_pair("c",3));

for (const auto &p : S)
std::cout << p.first << " "<<p.second<<" ";
std::cout << std::endl;

map<string,size_t, Scomp> SS([](const string&a, const string&b)
{ return  b > a; }
);

SS.insert(make_pair("d",1));

//别名
using set_map = map<string,size_t, Scomp>::value_type;

set<set_map> s_m;
s_m.insert(S.begin(),S.end());
s_m.insert(SS.begin(),SS.end()); 

//输出
for(const auto &s :s_m)
std::cout<<s.first <<" " <<s.second<<" ";

return 0;

}

解决方案二:

刚写的。。不知道,,是不是你的要求。。

解决方案三:

compare就是比较map的内容,也可以自己定义比较的方式,这个需要你自己定义

时间: 2024-12-03 15:50:56

c++标准库-C++标准库中,set容器的insert函数中的比较函数重写问题的相关文章

c语言数组与函数-如何在函数中给已经在主函数中定义好的数组赋值

问题描述 如何在函数中给已经在主函数中定义好的数组赋值 已经在main()中定义了一个长度为20的数组,想在定义的函数中给数组赋值,但一直报错,请问如何修改? void arrin(int *arr) { int i; arr[]={1,1,2,2,3,3,4,5,6,5,6,7,7,8,8,9,9,0,0}; for(i=0;i<20;i++) printf("%d",arr[i]); } main() { int testarr[20]; ............ } 解决方

函数调用-JavaScript中,如何在setTimeout函数中调用一个class中的函数

问题描述 JavaScript中,如何在setTimeout函数中调用一个class中的函数 function create_plant(name,position_first,position_second) { this.name=name; this.position_first=position_first; this.position_second=position_second; this.plant=function(a){ if((test==0)&&(this.name)

function-android中如何在另一个函数中调用监听器

问题描述 android中如何在另一个函数中调用监听器 现在有以下的代码,想在另一个函数和另一个类中调用这个监听器,加入什么样的代码能实现这个功能啊? public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_UP) { Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); Random

c-手持器开发中,事件引发的函数中怎样使用父函数中的变量

问题描述 手持器开发中,事件引发的函数中怎样使用父函数中的变量 求高手解决一个问题.我用GNU for ARM编译器编写手持器程序,C语言.在一个函数function1()中有一个变量a:函数中触发事件OnClick=function2:事件触发函数为 int function2(HWND Obj,PMsg Msg): 怎样才能使得变量a在function2函数中也能用,我不想用全局变量,而function2又不能有其他参数. 求大神帮忙解决.

深入理解函数中分配内存的问题

先看这样的代码  1void MyNew(int *p) 2{ 3    p = new int; 4} 5 6int main() 7{ 8    int *p = NULL; 9    MyNew(p);10} 开始写了一篇函数中分配内存的问题,通过说明他们产生了拷贝,而导致p不能成功分配.但并未提出事实根据,下面我们来仔细看看具体原因. 我们需要弄清两点:1.main函数中的p与MyNew函数中的p是不是一样:2.如果不一样,是怎么导致了不一样的. 第一点很好看,我们可以在编译器(VC环境

C语言中局部变量与全局变量在内存中的存放位置

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量. 1.1局部变量 局部变量也

在主函数中输入一个字符串str1,调用函数。

问题描述 在主函数中输入一个字符串str1,调用函数. 在主函数中输入一个字符串str1,调用函数chage(str1,N);将str1 中的小标为奇数的字符取出构成一个新的字符串放入字符串str2中.然后在主函数中输出字符串str2.运用到数组的引用. #include #define N 10 using namespace std; void chage(char str2[],int n); int main() { char str1[N]; for(int i=0;i cin>>s

深入探讨C语言中局部变量与全局变量在内存中的存放位置_C 语言

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量.1.1局部变量局部变量也称为内部变量

C++函数中return语句的使用方法_C 语言

C++中的return语句是函数中一个重要的语句,return语句用于结束当前正在执行的函数,并将控制权返回给调用此函数的函数. return语句有两种形式: return; return expression; 1.没有返回值的函数 不带返回值的return语句只能用于返回类型为void的函数,return语句是为了引起函数的强制结束,这种用法类似于循环结构中的break语句的作用. 例子: 复制代码 代码如下: void swap(int &v1,int &v2) { if(v1==v