gpt4 book ai didi

c++ - 在 map 中插入任意元素是可以的,但不适用于 vector

转载 作者:行者123 更新时间:2023-11-30 01:47:52 24 4
gpt4 key购买 nike

在下面的例子中,插入一个元素到一个空映射而不初始化它的大小是可以的。但是在一个空 vector 中插入一个元素是行不通的。规则是什么?在这方面,所有顺序容器是否都遵循 vector 的作用,所有关联的容器都遵循 map 的作用?这是为什么?

map<int, string> t;
t[1] = "string1";
for_each(t.begin(), t.end(), [](pair<int, string> x){cout << "(" << x.first << ", " << x.second << ") " << endl;});

vector<string> vt;
vt[0] = "string1";
for_each(vt.begin(), vt.end(), [](string x){cout << "(" << x << endl;});

最佳答案

这个:

t[1] = "string1";

很好,因为 map 的 operator[]如果不存在,将为该键插入一个元素。

这个:

vt[0] = "string1";

不好,因为 vector 的 operator[]只会返回那个特定的元素——不管它是否真的被构造过!如果你只想插入一个新元素,你需要:

vt.push_back("string1");
vt.emplace_back("string1");

甚至:

vt.resize(1);
vt[0] = "string1";

Do all the sequential containers follow what vector does, and all the associated containers follow what map does, in this aspect?

对于支持operator[]的容器,我相信这是通用的做法。当然,并非所有顺序容器(例如 list)或关联容器(例如 setunordered_set)都可以。

关于c++ - 在 map 中插入任意元素是可以的,但不适用于 vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31063819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com