gpt4 book ai didi

c++ - 为什么我不能将非常量参数函数与 stable_sort() 一起使用?

转载 作者:可可西里 更新时间:2023-11-01 17:49:11 26 4
gpt4 key购买 nike

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;

bool foo(string&s1, string&s2);

int main(int args, char *argv[])
{
istringstream istrm("counts elements for which predicate p returns");
vector<string> vec;
string word;
while (istrm >> word) {
vec.push_back(word);
}

stable_sort(vec.begin(), vec.end(), foo); //Conversion Error
//sort(vec.begin(), vec.end(), foo); //Using sort is also OK.

//Below is OK.
//int size_num = 7;
//auto num = count_if(vec.begin(), vec.end(), [size_num](string &s1) {
// return s1.size() > size_num;
//});
//cout << num;
}

bool foo(string&s1, string&s2) {
return s1.size() < s2.size();
}

我在将非常量参数函数传递给 stable_sort 时遇到转换错误,但 count_if 没问题。

来自 cppreference ,似乎使用非常量参数函数完全没问题。

The signature of the comparison function should be equivalent to the following:
bool cmp(const Type1 &a, const Type2 &b);
The signature does not need to have const &, but the function object must not modify the objects passed to it.

我在这里做错了什么?

PS:algorithm 中的函数将什么类型的对象传递给谓词?只有 const?只有非常量?还是两者兼而有之?

最佳答案

这是目前标准中的一个缺陷,请参阅 LWG 3031 .

在某些情况下,现有的主要实现不适用于此类比较器,并且标准不清楚它是否应该起作用。

类似问题:Is Comp comparator used in STL required to never change compared objects in STL?

关于c++ - 为什么我不能将非常量参数函数与 stable_sort() 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51074669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com