C++ 插入多集:在该值第一次出现之前,而不是在最后一次出现之后

C++ 插入多集:在该值第一次出现之前,而不是在最后一次出现之后,c++,stl,multiset,C++,Stl,Multiset,正如标题所述,multiset在所有相同值的范围末尾插入一个值 (例如:在多集1,2,2,3中插入2使其成为1,2,2,/*new*/2,3) 如何在所有相同值的范围开始处插入新值 (例如:在多集1,2,2,3中插入2应使1、/*成为新的*/2,2,3)试试这个 std::multiset<int> mset { 2,4,5,5,6,6 }; int val = 5; auto it = mset.equal_range ( val ).first; //Find the firs

正如标题所述,multiset在所有相同值的范围末尾插入一个值

(例如:在多集
1,2,2,3
中插入2使其成为
1,2,2,/*new*/2,3

如何在所有相同值的范围开始处插入新值

(例如:在多集
1,2,2,3
中插入2应使
1、/*成为新的*/2,2,3

试试这个

std::multiset<int> mset { 2,4,5,5,6,6 }; 
int val = 5;
auto it = mset.equal_range ( val ).first; //Find the first occurrence of your target value.  Function will return an iterator

mset.insert ( it, val );  //insert the value using the iterator 
std::多集mset{2,4,5,5,6,6};
int-val=5;
自动it=mset.equal_range(val)//找到目标值的第一个匹配项。函数将返回一个迭代器
mset.insert(it,val)//使用迭代器插入值

使用函数
insert(迭代器提示,常量值类型和值)
而不是
insert(常量值类型和值)
。根据文档,这将在
提示之前插入。您可以使用
std::multiset::equal_range
将迭代器设置到下限。

您不能反转整个multiset吗
std::multiset
并使用
reverse\u iterator
进行迭代?考虑到它还有其他用途,我认为这不是一个好的解决方案@Jarod42更好的例子是使用
std::pair
只比较
ValueType
至于
int
,这并不重要。@Jarod42