【发布时间】:2020-07-08 15:41:45
【问题描述】:
我有多个 3 个一维向量 (vector<int> starts, vector<int> ends, vector<int> points)。每个都有特定数量的元素。
我想以这样的顺序创建一个二维向量vector<pair<int,int>>matrix:
- 从
matrix的开头到start的大小第一个元素matrix是vector<int> starts的元素,第二个元素是“-1” - 现在将
vector<int> ends的元素附加到matrix,这样matrix的第一个 元素是vector<int> ends的元素,第二个 元素是“-2 " -
现在将
vector<int> points的元素附加到matrix,这样matrix的first 元素是vector<int> points的元素,second 元素是点的索引.视觉表现:-
输入:
开始:
{1, 2, 3}结束:{4, 5, 6}积分:(7, 8, 9}输出:
矩阵:
{ {1, -1}, {2, -1}, {3, -1}, {4, -2}, {5, -2}, {6, -2}, {7, 0}, {8, 1}, {9, 2} }
目前我正在使用带有 for-loop 函数的 push_back,它工作得非常好,但是当输入大小很大时,代码非常慢。
我使用的代码如下:
vector<pair<int,int>> fast_count_segments(
vector<int> starts,
vector<int> ends,
vector<int> points)
{
int i = 0;
vector<pair<int,int>>matrix;
for(i; i<starts.size(); i++) {
matrix.push_back(make_pair(starts[i],-1));
}
for(i; i<starts.size()+ends.size(); i++) {
matrix.push_back(make_pair(ends[i-starts.size()],-2));
}
for(i; i<starts.size()+ends.size()+points.size(); i++) {
matrix.push_back(make_pair(
points[i-starts.size()-ends.size()],
i-(starts.size()+ends.size())
));
}
return matrix;
}
您能否帮助您了解如何在不遍历每个元素的情况下快速填充 2D 向量。我正在使用 C++11。提前致谢!!
【问题讨论】:
-
不要用 C 标签标记 C++ 问题。它不会帮助您结交朋友和影响他人。
-
vector<pair<int,int>>...呃,这不是它的工作原理。这将创建一个成对的 int 的一维向量。还有boost.org/doc/libs/1_72_0/libs/multi_array/doc/user.html -
@datenwolf:这可能是矩阵的稀疏表示。
-
@epinpoklum 仅 2×N 矩阵或 N×2 矩阵。也许你想要
vector<tuple<x,y,value>>? -
@einpoklum:仅当您要表示的稀疏矩阵的元素是集合
{False | True}的成员时。或者,如果您想表示一个双对角矩阵。无论哪种方式,这都是一种非常低效的方法。
标签: c++ c++11 vector c++14 c++17