制作一个对的向量,对其进行排序,然后从中提取向量
Making a vector of pairs, sorting it and then extract the vectors from it
我有两个std::vector<double>
向量。我想从它们制作一个对向量,然后根据第一个向量的值对其进行排序;最后想从中提取排序后的向量。
我的代码是:
#include <iostream>
using namespace std;
std::vector<double> new ( std::vector<double> pre, std::vector<double> post){
int n= pre.size();
//initialising vector of pairs
std::vector< std::pair <double,double> > new;
// Entering values in vector of pairs
for (int i=0; i<n; i++) {
new.push_back( std::make_pair(pre[i],post[i]) );
}
//sort it
sort(new.begin(), new.end());
// now extract the elements of sorted paired vector
// and store it in a new vector
std::vector<double> newb(n);
for (int i=0; i<n; i++) {
newb[i] = new[i].first;
}
return newb;
}
但是我收到错误:
main.cpp:15:6: error: 'vector' is not a member of 'std'
std::vector<double> new ( std::vector<double> pre, std::vector<double> post){
^~~
main.cpp:15:18: error: expected primary-expression before 'double'
std::vector<double> new ( std::vector<double> pre, std::vector<double> post){
^~~~~~
我做错了什么?
你失踪了:
#include <algorithm> // for sort
#include <vector>
https://en.cppreference.com/w/cpp/container/vector
此外,new
是一个运算符,因此将函数命名为new
不太可能起作用。
尝试包含适当的标头:
#include <algorithm>
#include <vector>
接下来,您将遇到名称"new"的问题,这是一个保留关键字。尝试为函数和变量查找其他名称。 我还建议通过引用传递向量:
std::vector<double> const &pre, ...
你错过了这些:
#include <algorithm> // std::sort
#include <vector> // std::vector
而且,您永远不会返回排序后的post
向量,因此您的向量不再具有任何索引连接。为了能够返回排序后的向量,请通过引用将它们传递给您的函数。
您可以对索引进行排序并使用排序的索引更改两个向量中的值,而不是创建对向量。您可以使用std::tie
使比较更容易。
#include <tuple> // std::tie
void duosort(std::vector<double>& pre, std::vector<double>& post) {
if(pre.size() != post.size()) throw std::range_error("bork");
std::vector<size_t> idx;
for(size_t i = 0; i < pre.size(); ++i) idx.emplace_back(i);
sort(idx.begin(), idx.end(), [&pre, &post](const auto& a, const auto& b) {
return std::tie(pre[a], post[a]) < std::tie(pre[b], post[b]);
});
// put the values in sorted order according to idx
std::vector<double> pre_temp(idx.size());
std::vector<double> post_temp(idx.size());
for(size_t i = 0; i < idx.size(); ++i) {
pre_temp[i] = pre[idx[i]];
post_temp[i] = post[idx[i]];
}
pre.swap(pre_temp);
post.swap(post_temp);
}
相关文章:
- 将结构向量排序为子组
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 如何在对向量排序后更改索引值?c++
- C++向量排序给出0作为输出
- 将许多向量排序在一起
- 根据一个向量对多个向量排序
- 编译错误向量排序和联合
- C++我自己的函数进行向量排序
- 将字符串的向量排序为日期"yyyymmdd"
- C++ 通过使用旧向量进行预排序来改进向量排序
- C 向量排序 .h .cpp中的单独文件
- 向量排序-c++
- 将向量排序到一个无序映射c++11中
- 向量的向量排序
- c++向量排序方法编译失败,返回预期表达式
- 如何对bitset向量排序
- 向量排序的基础上只有先
- 我如何以相同的方式对两个向量排序,而条件只使用其中一个向量
- 列表排序和结构体向量排序之间的性能差距.c++
- 如何基于第二个字符串对字符串向量的向量排序