如何访问vector<pair<int,pair<int,int>>> D[20]?存储与取值操作是否正确?
嘿,我来一步步帮你理清这个问题~
关于
vector<pair<int, pair<int, int>>> D[20]的访问与操作问题 1. 如何访问这个数组?
首先明确结构:D是一个包含20个元素的数组,每个元素都是vector<pair<int, pair<int, int>>>类型的动态向量。访问要分三层递进:
- 先定位数组索引:
D[i](i从0到19),拿到第i个vector对象; - 再定位vector内的元素:
D[i][j](j是vector元素的索引,从0开始),拿到一个pair<int, pair<int, int>>对象; - 最后访问嵌套的pair成员:
- 外层pair的第一个int值:
D[i][j].first; - 内层嵌套pair的第一个int值:
D[i][j].second.first; - 内层嵌套pair的第二个int值:
D[i][j].second.second。
- 外层pair的第一个int值:
举个实际访问的例子:
// 访问第2个数组元素(索引1)里的第1个vector元素(索引0)的内层pair第二个值 int target_val = D[1][0].second.second;
2. 这种存储方式是否正确?
语法上完全合法,至于是否“正确”取决于你的业务需求:
如果你的数据恰好是「20个固定分组,每个分组里有若干条记录,每条记录包含一个独立int值+一对关联int值」,那这个结构非常适配。比如用来存储“20个区域的物流订单,每个订单包含订单号+(收件人ID,送达次数)”这类场景,就很合理。
当然如果你的分组内记录数固定,换成二维数组可能更高效,但从语法和逻辑合理性来说,这个写法没任何问题。
3. 你需要的操作是否可行?
完全可以实现!我把你的需求拆解成具体代码示例:
步骤1:将内层pair的第二个位置设为0
假设要操作D[i][j]这个元素:
// 把嵌套pair的第二个值置为0 D[i][j].second.second = 0;
步骤2:用变量a获取x的值,变量b获取y的值
假设x对应内层pair的第一个值,y对应第二个值:
int a = D[i][j].second.first; // 拿到x int b = D[i][j].second.second; // 拿到y
步骤3:将内层pair中的0值自增1
直接对目标值做自增操作即可:
D[i][j].second.second++; // 等价于 D[i][j].second.second += 1;
完整可运行的示例片段
#include <vector> #include <utility> // 必须包含这个头文件才能使用pair using namespace std; // 简化代码,实际项目可根据情况选择是否使用 int main() { // 初始化数组,每个vector可以先添加元素 vector<pair<int, pair<int, int>>> D[20]; // 给D[0]添加一条示例记录:外层int是100,内层pair是(15, 20) D[0].emplace_back(100, make_pair(15, 20)); // 执行你的需求操作 D[0][0].second.second = 0; // 内层pair第二个值设为0 int a = D[0][0].second.first; // a = 15 int b = D[0][0].second.second; // b = 0 D[0][0].second.second++; // 现在内层第二个值变成1 return 0; }
小提醒
- 务必包含
<vector>和<utility>头文件,否则编译器会报错; - 访问索引前要确保在合法范围内:i不能超过19,j不能超过对应vector的
size()-1,否则会触发越界访问的未定义行为; - 如果vector是空的,直接访问
D[i][j]会崩溃,操作前要用push_back或emplace_back先添加元素。
内容的提问来源于stack exchange,提问作者Tipy Joace
相关产品推荐
相关产品推荐

