C++中如何为二维vector每行添加整数与元组作为列成员?
解决你的C++二维容器类型不匹配问题
你遇到的错误核心是容器类型定义和你要存储的数据类型不匹配:你定义的matrix是std::vector<std::vector<int>>,这意味着容器里的每一个元素都必须是int类型,但你试图把一个tuple<int, int>赋值给它,两种类型完全不兼容,所以编译器会报错。
根据你想要创建的{{200, (44,66)}, {242, (13,44)}, {300, (23,71)}}结构,这里每个子项是「一个整数 + 一个二元整数组」,最适合的容器是std::vector<std::pair<int, std::tuple<int, int>>>,下面是完整的实现代码:
#include <vector> #include <tuple> #include <utility> int main() { // 定义容器:每个元素是 pair,第一个成员是int,第二个是二元tuple std::vector<std::pair<int, std::tuple<int, int>>> matrix; // 向容器中添加元素(emplace_back直接构造,更高效) matrix.emplace_back(200, std::make_tuple(44, 66)); matrix.emplace_back(242, std::make_tuple(13, 44)); matrix.emplace_back(300, std::make_tuple(23, 71)); // 访问容器元素的示例 int first_value = matrix[0].first; // 获取第一个子项的整数200 auto& first_tuple = matrix[0].second; int tuple_a = std::get<0>(first_tuple); // 获取tuple里的44 int tuple_b = std::get<1>(first_tuple); // 获取tuple里的66 return 0; }
如果你坚持要使用嵌套的vector结构(不推荐,因为类型不够清晰),可以用C++17引入的std::variant来容纳不同类型的元素,代码如下:
#include <vector> #include <tuple> #include <variant> int main() { // 定义可以容纳int或二元tuple的变体类型 using ContainerElement = std::variant<int, std::tuple<int, int>>; std::vector<std::vector<ContainerElement>> matrix; // 添加元素 matrix.push_back({200, std::make_tuple(44, 66)}); matrix.push_back({242, std::make_tuple(13, 44)}); matrix.push_back({300, std::make_tuple(23, 71)}); // 访问元素时需要先判断类型 if (std::holds_alternative<int>(matrix[0][0])) { int value = std::get<int>(matrix[0][0]); } if (std::holds_alternative<std::tuple<int, int>>(matrix[0][1])) { auto tuple = std::get<std::tuple<int, int>>(matrix[0][1]); } return 0; }
总结一下:优先选择pair的方案,它类型明确,访问效率高,代码可读性也更好。
内容的提问来源于stack exchange,提问作者Arun Kumar
相关产品推荐
相关产品推荐

