我有
vector<vector<int>> vec
在我的C ++应用程序。
为“大”向量的元素整数每向量具有4倍INT的值。 我想在第三值排序VEC筑底的它的整数(我的意思是每一个“内部”矢量第三元素)的含量载体 - 这可能吗?
编辑
比方说,我有一个函数
COST(vector<int>)
其计算我一些价值根据我的矢量值 - 我可以用它比较 - 参数呢? 它会帮助我很多。
我有
vector<vector<int>> vec
在我的C ++应用程序。
为“大”向量的元素整数每向量具有4倍INT的值。 我想在第三值排序VEC筑底的它的整数(我的意思是每一个“内部”矢量第三元素)的含量载体 - 这可能吗?
编辑
比方说,我有一个函数
COST(vector<int>)
其计算我一些价值根据我的矢量值 - 我可以用它比较 - 参数呢? 它会帮助我很多。
当然是啦。 std::sort
可以采取的第三参数,该参数是分选时使用的比较函数。 例如,你可以使用lambda函数:
std::vector<std::vector<int>> vec;
// Fill it
std::sort(vec.begin(), vec.end(),
[](const std::vector<int>& a, const std::vector<int>& b) {
return a[2] < b[2];
});
或者,也可以通过其他任何可调用与签名bool(const std::vector<int>&, const std::vector<int>&)
诸如一个或算符函数指针。
响应编辑:简单地套用你的COST
函数, a
和b
:
std::sort(vec.begin(), vec.end(),
[](const std::vector<int>& a, const std::vector<int>& b) {
return COST(a) < COST(b);
});
如果您想通过成本两个向量比较,试试这个:
bool predicate(const std::vector<int>& a, const std::vector<int>& b)
{
return COST(a) < COST(b);
}
笔记:
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
// This makes the sort be according to column 2 and ascending
bool sortFunc( const vector<int>& p1,
const vector<int>& p2 ) {
return p1[1] < p2[1];
}
int main() {
srand(time(NULL));
// Creates and initializes 10 x 4 vector
vector< vector<int> > vec;
for( int i=0; i<10; i++ ) {
vector<int> tmpVec;
for( int j=0; j<2; j++ ) {
tmpVec.push_back( rand()%10 );
}
vec.push_back( tmpVec );
}
// Print out the pre-sorted vector
cout << "Pre-sorting state:" << endl;
for( int i=0; i<vec.size(); i++ ) {
for( int j=0; j<vec[i].size(); j++ ) {
cout << vec[i][j] << " ";
}
cout << endl;
}
cout << endl;
// Do the sorting according to column 2
sort(vec.begin(), vec.end(), sortFunc);
// Print out the post-sorted vector
cout << "Post-sorting state:" << endl;
for( int i=0; i<vec.size(); i++ ) {
for( int j=0; j<vec[i].size(); j++ ) {
cout << vec[i][j] << " ";
}
cout << endl;
}
return 0;
}
来源: https://shihho.wordpress.com/2012/11/28/sort_with_vectors/