为什么vector :: operator []的实现与map :: operator []类似?

133*_*nja 4 c++ dictionary stl vector

有没有任何理由std::vectoroperator[],只是返回一个引用而不是插入一个新的元素呢?cppreference.com页面在这里vector::operator

std::map::operator[]此不同,此运算符永远不会将新元素插入容器中.

虽然页面map::operator[]

"返回对映射到等效于键的键的值的引用,如果此类键尚不存在则执行插入."

为什么无法vector::operator[]通过调用vector::push_backvector::insert如何map::operator[]调用来实现insert(std::make_pair(key, T())).first->second;

jPl*_*tte 7

很简单:因为它没有意义.你能指望什么

std::vector<int> a = {1, 2, 3};
a[10] = 4;
Run Code Online (Sandbox Code Playgroud)

去做?即使您指定索引10,也要创建第四个元素?创建元素3到10并返回对最后一个的引用?两者都不是特别直观的.

如果你真的想使用operator[]代替值来填充矢量push_back,你可以resize在设置它们之前调用矢量来创建元素.

编辑:或者,如果你真的想要一个关联容器,除了排序之外索引很重要,std::map<int, YourData>实际上可能更有意义.

  • 值得强调的是关键点:对于`map`,操作符最多在给定键处插入一个元素.对于`vector`,您还必须在其他索引处插入*other*元素. (2认同)