gpt4 book ai didi

c++ - std::map 的类型要求

转载 作者:IT老高 更新时间:2023-10-28 23:00:16 24 4
gpt4 key购买 nike

今天我创建了一个映射,其中值类型没有默认构造函数。我很惊讶我无法使用 operator[] 将元素插入到此 map 中,但我必须使用 insert 方法。

那么,对于 std::map 的 key 和 value 类型的具体要求是什么?

这是一个简短的例子:

#include <map>

struct A
{
A(int){}
};

int main()
{
std::map< int, A > m;
A a1(2);
A a2(3);
A a3(4);
m[5] = a1;
m[3] = a2;
m[2] = a3;
}

我是这样编译的:

[vladimir@sandbox tmp]$ g++ b5.cpp -Wall -Wextra -ansi -pedantic
/usr/lib/gcc/i386-redhat-linux/4.3.0/../../../../include/c++/4.3.0/bits/stl_map.h: In member function ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = int, _Tp = A, _Compare = std::less<int>, _Alloc = std::allocator<std::pair<const int, A> >]’:
b5.cpp:14: instantiated from here
/usr/lib/gcc/i386-redhat-linux/4.3.0/../../../../include/c++/4.3.0/bits/stl_map.h:419: error: no matching function for call to ‘A::A()’
b5.cpp:5: note: candidates are: A::A(int)
b5.cpp:4: note: A::A(const A&)

最佳答案

operator[] 确实需要默认可构造性,因为此方法的语义要求如果 key 尚不存在,则创建适当的条目。因此:

map<TKey, TValue> mymap;
TKey foo = …;
TValue& x = mymap[foo];

如果 foo 在 map 中不存在,将创建并存储一个新对象 TValue(),并返回对它的引用。

关于c++ - std::map 的类型要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4254906/

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