gpt4 book ai didi

c++ - 索引的排序 vector

转载 作者:行者123 更新时间:2023-11-30 01:26:26 24 4
gpt4 key购买 nike

我有一个非常简单的问题,我想我只是在做一些愚蠢的事情,但几个小时都找不到错误....

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

typedef unsigned int uint;

enum {ASCEND, DESCEND};

template<typename T>
bool ascend_sort(pair<uint, T> i, pair<uint, T> j){return j.second>i.second;}

template<typename T>
bool descend_sort(pair<uint, T> i, pair<uint, T> j){return i.second>j.second;}

template<typename T>
void sortIdx(vector<uint>& idx, const vector<T>& src, int dir=ASCEND){
vector< pair<uint, T> > tmp (src.size());
for (uint i=0; i<src.size(); i++){
tmp.push_back(pair<uint, T>(i, src[i]));
cout << i << " " << src[i] << " \n";
}

if (dir==ASCEND){
sort(tmp.begin(), tmp.end(), ascend_sort<T>);
}else{
sort(tmp.begin(), tmp.end(), descend_sort<T>);
}

idx.resize(src.size());

for (uint i=0; i<src.size(); i++){
idx[i] = (tmp[i].first);
cout << tmp[i].first << " \n" ;
}
}

为什么 http://ideone.com/HOnvI工作和http://ideone.com/R6H0n不……

代码仅在上升排序和下降排序上有所不同。我还测试了没有 map 的排序(直接对 vector 排序),并且在那里工作正常。

最佳答案

线

vector< pair<uint, T>  > tmp (src.size());

创建一个大小为 src.size() 的 vector ,其中填充了默认元素(此处:pair(0, 0.0));

.push_back() 将附加元素添加到该数组的末尾(现在的大小为 (2*src.size())

然后在排序之后你只打印第一个 src.size() 元素,它们都是初始的 0,0.0

要修复,只需将 vector 声明为空:

vector< pair<uint, T>  > tmp;

关于c++ - 索引的排序 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401839/

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