Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:将元素添加到std::set/map或std::unordered_set/map时,可以调用copy-ctor多少次_C++_Std - Fatal编程技术网

C++ C++;:将元素添加到std::set/map或std::unordered_set/map时,可以调用copy-ctor多少次

C++ C++;:将元素添加到std::set/map或std::unordered_set/map时,可以调用copy-ctor多少次,c++,std,C++,Std,很明显,在大多数std::set实现中,插入元素只会导致调用T类的copy-ctor一次。但从理论上讲,数据结构可能是以某种奇怪的方式实现的,并且由于某些原因(在单次插入期间),最多会复制集合的c*log N元素 我的问题是:C++标准是否对此有任何限制?如果不是,我怎么能睡个好觉呢?我知道下面这样的代码可能需要几年时间才能在新版本的gcc中运行: std::map<int, std::map<int, int>> myMap; for (int i = 0; i &l

很明显,在大多数
std::set
实现中,插入元素只会导致调用
T
类的copy-ctor一次。但从理论上讲,数据结构可能是以某种奇怪的方式实现的,并且由于某些原因(在单次插入期间),最多会复制集合的
c*log N
元素

我的问题是:C++标准是否对此有任何限制?如果不是,我怎么能睡个好觉呢?我知道下面这样的代码可能需要几年时间才能在新版本的gcc中运行:

std::map<int, std::map<int, int>> myMap;

for (int i = 0; i < 1000000; ++i) {
    myMap[rand()][rand()] = rand();
}
std::map myMap;
对于(int i=0;i<1000000;++i){
myMap[rand()][rand()]=rand();
}

23.2.4第9段规定:

插入和放置成员不得影响迭代器和容器引用的有效性, 擦除成员应仅使迭代器和对已擦除元素的引用无效


因此,插入到
std::map
中不能移动或复制所插入元素以外的任何元素。

标准不能保证
int main(){}
将花费不到1000000年的时间,因此在任何情况下你都不能睡好觉。嗯,它仍然不允许将它们复制到某个地方,以某种方式使用,然后删除副本。是吗?@anxieux:这样的拷贝有什么意义?由于引用必须保持有效,并且这些引用可以用来更改映射中的值,映射中的相关值必须保持在同一地址。是的,这不太可能。。。但有一个愚蠢的纯粹主义问题:标准是否禁止库在向std::set插入元素时挖掘比特币?