gpt4 book ai didi

c++ - 如何使用 std::pair 将两个 std::vector 组合成一个 std::vector

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:52 24 4
gpt4 key购买 nike

假设我有两个 vector “a”和“b”,我想对“a”进行排序,并且我希望“b”像排序后的“a”一样重新排序。

我能想到的最合乎逻辑的方法是将这两个 vector 组合成一个 std::pair vector ,这样我就可以应用 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。

最佳答案

你想要一个引用对的 vector ,比如:

#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;
}

注意 虽然不是所有可能的操作都可以通过引用对来完成。例如。您不能通过无参数构造函数创建它的实例。这就是为什么您不能像示例中那样使用三个空元素初始化 vector 的原因:

 std::vector<std::pair<int&, std::string&>> p(3);

关于c++ - 如何使用 std::pair 将两个 std::vector 组合成一个 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929365/

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