假设我有两个向量“a”和“b”,我想对“a”进行排序,我希望“b”像排序的“a”一样重新排序。
我能想到的最合乎逻辑的方法是将这两个向量组合成一个std :: pair的向量,这样我可以应用std :: sort,下面是一个玩具示例
std::vector<int> a(3,1);
std::vector<std::string> b(3,"hi");
std::vector<std::pair<int,std::string>> p(3);
for(int i=0;i<a.size();i++){
p.push_back(std::make_pair(std::ref(a[i]),std::ref(b[i])));
}
p[0].first = p[0].first+1;
std::cout << p[0].first << " " << a[0] << std::endl;
我希望它打印2 2但是打印2 1.我还尝试用
替换for循环for(int i=0;i<a.size();i++){
p[i].first = std::ref(a[i]);
p[i].second = std::ref(b[i]);
}
但它仍在打印2 1.我可以在排序后将值从“p”复制回“a”和“b”但是当“a”和“b”很大时这将是低效的。我做错了什么?
我的编译器是gcc 4.9.3。
答案 0 :(得分:2)
你想要一组引用对象:
<div class='asset_list_wrapper'>
<div id='asset_list'>
<h1>
hello
</h1>
</div>
<div id='asset_view'>
<iframe src='' frameborder='0' id='mainFrame' name='mainFrame' height='100%' width='100%'>hello</iframe>
</div>
</div>
小心虽然并非所有可能的操作都可以使用一对引用来完成。例如。你无法通过无参数构造函数创建它的实例。这就是为什么你不能用你的例子中的三个空元素初始化向量:
#include <iostream>
#include <string>
#include <vector>
#include <utility>
int main() {
std::vector<int> a(3,1);
std::vector<std::string> b(3,"hi");
std::vector<std::pair<int&, std::string&>> p;
for(int i=0;i<a.size();i++){
p.push_back(std::pair<int&, std::string&>(a[i],b[i]));
}
p[0].first = p[0].first+1;
std::cout << p[0].first << " " << a[0] << std::endl;
}