如何将元素插入STL矢量矩阵中
How can I insert a element in a STL vector matrix?
我正在编写使用stl vector class创建Adjacency_matrix的代码
我的矩阵是:
vector<vector<float> > adjacency_matrix;
我需要知道如何在矩阵中插入新值,类似于v [x] [y] = z
我尝试此代码,但失败:
adjacency_matrix.insert((adjacency_matrix.begin()+node1).begin()+node2,distance);
示例
我有这个
0 [] 7 9
2.6 0 [] 3.5
[] [] 0 []
[] [] [] 0
然后,我必须在(3,2)位置插入12.5值结果必须是:
0 [] 7 9
2.6 0 [] 3.5
[] [] 0 []
[] 12.5 [] 0
你能帮我吗?
std::vector
是连续的,可解析的值。如果以前没有完全用元素初始化元素,则无法访问其X-the元素。这将是不确定的行为。
因此,您应该事先创建整个矩阵:
size_t m_size = 10;
std::vector<std::vector<float>> matrix(m_size, std::vector<float>(m_size, 0.0));
matrix[1][3] = 1.0;
std::cout << matrix[0][0]; // 0.0
std::cout << matrix[1][3]; // 1.0
// still BAD, because we initialized only matrix of size 10; we could, however, expand it e.g. with vector::push_back
matrix[13][0] = 2; // UB: crash
如果您不能这样做,则可以使用std::map
,在调用operator[]
时会自动创建默认元素(请注意,但是MAP实际上是树,operator[]
执行对数搜索而不是向量的constant访问):
std::map<size_t, std::map<size_t, float>> matrix;
matrix[0][1] = 3.0;
std::cout << matrix[0][0]; // 0.0
std::cout << matrix[0][1]; // 3.0
如果非初始化的值是不确定的,则可以用例如std::optional
:
std::map<size_t, std::map<size_t, std::optional<float>>> matrix;
matrix[0][1] = 5.0;
std::cout << matrix[0][0].value_or(127.0); // 127.0
std::cout << *(matrix[0][1]); // 5.0
if (matrix[14][27])
std::cout << *(matrix[14][27]);
else
std::cout << "not initialized";
如注释中所述,您需要先初始化"矩阵"。您可以访问元素。但是请注意,您应该将内部向量插入而不是"矩阵"中。另外,begin()返回一个需要使用->
加速的迭代器。如果您的"矩阵"适当初始化,您也可以将[]
使用用于ACCE,这更可用。
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<vector<float>> test(10,vector<float>(10));
int x=1;
int y=2;
//access via iterator
auto inner_it =test.begin()+x;
inner_it->insert(inner_it->begin()+y,2.0);
cout<<test[x][y]<<"n";
// access via []
test[y][x]=3;
cout<<test[y][x];
return 0;
}
根据您想要的东西,最好使用线性代数库(例如eigen)。
相关文章:
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 如何在 c++ stl 中获取列表中被推回的元素的地址,在常量时间内?
- 是否有具有外部元素分配的序列容器(在 STL 中)?
- 擦除是否删除 stl 无序列图元素使用的堆内存
- 如何根据对的第二个元素对 STL c++ 中的一组对进行排序?
- 如何将元素从 STL 队列传递到函数?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 如何在非STL图中找到最小的元素?
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 无法在STL中打印一组矢量的元素
- 如果我想从类型"T"定义元素的容器(来自 STL),那么"T"必须使用默认构造函数?
- 使用 STL 交换堆栈 C++ 中的第一个和最后一个元素
- 如何使用 STL 哈希容器中的哈希值检索元素?
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- lower_bound 在 C++ STL 中返回迭代器,即使元素不存在也是如此.如何避免这种情况?
- 遍历 STL 映射(集/多集)的最佳方法,同时元素可能会在循环期间被删除并重新插入?
- 直接访问 STL "set"元素
- 无法将元素添加到 STL 映射
- 如何访问嵌套的stl元素