如何解决使用自定义函数对数组向量进行排序时出错
这是我的代码:
#include<vector>
#include<array>
#include<iostream>
#include<algorithm>
using namespace std;
bool compareel (int a[],int b[])
{
return (a[2] < b[2]);
}
int main ()
{
vector < array < int,3 >> edges = { {1,2,3},{2,34},{3,0} };
sort (edges.begin (),edges.begin () + 3,compareel);
for (int i = 0; i < 3; i++)
cout << edges[i][2] << ' ';
return 0;
}
代码在将数组作为参数传递给 compareel() 时似乎有问题,我尝试了不同的传递数组的方法,但似乎没有任何效果。
编译错误:
/usr/include/c++/7/bits/predefined_ops.h:143:18: error: cannot convert ‘std::array’ to ‘int*’ in argument passing
解决方法
在这个函数中
bool compareel (int a[],int b[])
{
return (a[2] < b[2]);
}
参数由编译器调整为int *
类型。即上面的函数等价于
bool compareel (int *a,int *b)
{
return (a[2] < b[2]);
}
但是类模板 std::array
没有这种隐式转换。
所以你需要像这样声明函数
bool compareel ( const std::array<int,3> &a,const std::array<int,3> &b )
{
return (a[2] < b[2]);
}
这是一个演示程序。
#include <iostream>
#include <array>
#include <vector>
#include <iterator>
#include <algorithm>
bool compareel ( const std::array<int,3> &b )
{
return a[2] < b[2];
}
int main ()
{
std::vector<std::array < int,3>> edges =
{
{ 1,2,3 },{ 2,34 },{ 3,0 }
};
std::sort( std::begin( edges ),std::end( edges ),compareel );
for ( const auto &item : edges )
{
std::cout << item[2] << ' ';
}
std::cout << '\n';
return 0;
}
程序输出为
0 3 34
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。