gpt4 book ai didi

c++ - 在 Visual Studio 和 GCC 中使用 STL 排序排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:21 26 4
gpt4 key购买 nike

编写应在 Linux 和 Windows 环境中可移植的程序 在使用 Visual Studio 和 gcc 进行编译时,我发现 STL 排序函数存在问题。为了对复杂数据结构的 vector 进行排序,我为这种形式的结构编写了一个 int 转换运算符:

struct result
{
public :
int Gene_a;
int Gene_b;
std::vector<int> score;
float total_score;
operator int() {return total_score;}
}

在那种情况下,我在 visual studio 中使用整数的标准排序算法没有问题:

sort(results.rbegin(),results.rend());

但是当尝试使用 GCC(实际上是 g++)编译它时会导致有趣的错误。为了避免这种情况,我似乎必须编写一个排序函数:

 inline bool better (result a, result b)
{
return a.total_score > b.total_score;
}

并以以下形式调用排序:

sort(results.begin(),results.end(),better);

我使用的是标准 C++ 之外的东西还是缺少 g++ STL 实现?能不能让g++理解struct的vector等价于int的vector?

这里有一个简短的主要说明错误:

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
vector<result> r; // define a vector of struct
for (int i=0;i<10;i++) // fill up with data
{
result a;
a.Gene_a=i;
a.Gene_b=2*i;
for(int j=0;j<i;j++)
a.score.push_back(i); // fill the int vector in the struct
a.total_score=i;
r.push_back(a);
}
// sort(r.rbegin(),r.rend()); // this line will fail in g++
sort(r.rbegin(),r.rend(),better);
for (int i=0;i<10;i++) // demonstrate that the int operator works
cout << (int)r[i] << endl;
}// End main

最佳答案

我看到这两种比较方法之间唯一有意义的区别是,当元素为 const 时,第二种方法有效。第一个应该是:

//             vvvvv
operator int() const

即使您正在修改容器,您的比较仍然要求它适用于 const 对象。在您的情况下,实现使用了该假设并且出现了错误。

但这无关紧要,因为要对容器进行排序,它的元素需要是可修改的...

关于c++ - 在 Visual Studio 和 GCC 中使用 STL 排序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7896937/

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