a******r 发帖数: 9 | 1 a是一个一维数组,包含7个元素。想用Algorithm里的sort算法对a进行排序,可是如何能打印a数组内元素的对应序号呢?
vector va;
vector ::iterator aIter;
for (int i=0;i<7; i++)
{
va.push_back(a[i]);
}
sort(va.begin(),va.end());
比如a[3]={4,1,5},排序完之后打印出1,4,5。如何返回1,0,2这个对应序号?
或者使用其他STL函数也可以的。
谢谢各位前辈 | d*******l 发帖数: 338 | 2 stl本身没有这种东西,你可以自己维护这个信息。有什么要求吗?如果没什么要求,
你直接开一个vector >,push_back(make_pair(a[i],i))再sort不就行了
何能打印a数组内元素的对应序号呢?
【在 a******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : a是一个一维数组,包含7个元素。想用Algorithm里的sort算法对a进行排序,可是如何能打印a数组内元素的对应序号呢? : vector va; : vector ::iterator aIter; : for (int i=0;i<7; i++) : { : va.push_back(a[i]); : } : : sort(va.begin(),va.end()); : 比如a[3]={4,1,5},排序完之后打印出1,4,5。如何返回1,0,2这个对应序号?
| i**********e 发帖数: 1145 | 3 vector > va;
for (int i = 0; i < n; i++) {
va.push_back(pair(a[i], i));
}
sort(va.begin(), va.end());
for (int i = 0; i < n; i++) {
cout << va[i].second << " ";
}
一些常见面试题的答案与总结 -
http://www.ihas1337code.com | y*******g 发帖数: 6599 | 4 map m;
for(int i=0;i<7;i++) {
m[a[i]]=i;
}
for(map::iterator it = m.begin();it!=m.end();++it) {
it->first; //1, 4,5
it->second; //1,0,2
}
何能打印a数组内元素的对应序号呢?
【在 a******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : a是一个一维数组,包含7个元素。想用Algorithm里的sort算法对a进行排序,可是如何能打印a数组内元素的对应序号呢? : vector va; : vector ::iterator aIter; : for (int i=0;i<7; i++) : { : va.push_back(a[i]); : } : : sort(va.begin(),va.end()); : 比如a[3]={4,1,5},排序完之后打印出1,4,5。如何返回1,0,2这个对应序号?
| d*******l 发帖数: 338 | 5 需要考虑下数组中有重复元素的情形
【在 y*******g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : map m; : for(int i=0;i<7;i++) { : m[a[i]]=i; : } : for(map::iterator it = m.begin();it!=m.end();++it) { : it->first; //1, 4,5 : it->second; //1,0,2 : } : : 何能打印a数组内元素的对应序号呢?
| y*******g 发帖数: 6599 | 6 有道理
【在 d*******l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 需要考虑下数组中有重复元素的情形
| w*******s 发帖数: 138 | 7
何能打印a数组内元素的对应序号呢?
自己写一个compare函数就可以了:
bool compare(int a, int b) {
return va[a] < va[b];
}
然后
vector index;
for (int i = 0; i < va.size(); ++i) {
index.push_back(i);
}
sort(index.begin(), index.end(), compare);
【在 a******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : a是一个一维数组,包含7个元素。想用Algorithm里的sort算法对a进行排序,可是如何能打印a数组内元素的对应序号呢? : vector va; : vector ::iterator aIter; : for (int i=0;i<7; i++) : { : va.push_back(a[i]); : } : : sort(va.begin(),va.end()); : 比如a[3]={4,1,5},排序完之后打印出1,4,5。如何返回1,0,2这个对应序号?
| a******r 发帖数: 9 | | c*********t 发帖数: 2921 | 9 pair的大小比较是按照first来比较的?
谢谢!
【在 i**********e 的大作中提到】![](/moin_static193/solenoid/img/up.png) : vector > va; : for (int i = 0; i < n; i++) { : va.push_back(pair(a[i], i)); : } : sort(va.begin(), va.end()); : for (int i = 0; i < n; i++) { : cout << va[i].second << " "; : } : 一些常见面试题的答案与总结 - : http://www.ihas1337code.com
| i**********e 发帖数: 1145 | 10 是的。但如果 first 是一样,那就会比较 second.
From http://www.cplusplus.com/reference/std/utility/pair/:
In inequality comparisons (<, >), only the first element is compared, except
if both first elements compare equal to each other, in this case only the
second element is taken into consideration for the comparison operation.
一些常见面试题的答案与总结 -
http://www.ihas1337code.com
【在 c*********t 的大作中提到】![](/moin_static193/solenoid/img/up.png) : pair的大小比较是按照first来比较的? : 谢谢!
|
|