我有一个键类型为std::pair<Foo,Bar>
和值in
的 map ,我想通过将一对std::pair<std::pair<Foo,Bar> , int>
传递给插入函数来插入 map (online source)
struct Foo{};
struct Bar{};
typedef std::pair<Foo,Bar> FooBar;
typedef std::pair<FooBar,int> FooBarPair;
typedef std::map<FooBar,int> FooBarMap;
struct FooBarData
{
operator const FooBarPair() const
{
return std::make_pair( std::make_pair( m_foo , m_bar ) , m_num );
}
private:
int m_num;
Foo m_foo;
Bar m_bar;
};
int main()
{
FooBarData fbd;
FooBarMap fbm;
fbm.insert( fbd );
}
lang错误消息
/usr/include/c++/v1/map:1041:9: note: candidate function not viable: no known conversion from 'FooBarData' to 'const value_type' (aka 'const pair<const key_type, mapped_type>') for 1st argument
insert(const value_type& __v) {return __tree_.__insert_unique(__v);}
^
/usr/include/c++/v1/map:1050:14: note: candidate function template not viable: requires 2 arguments, but 1 was provided
void insert(_InputIterator __f, _InputIterator __l)
^
/usr/include/c++/v1/map:1045:9: note: candidate function not viable: requires 2 arguments, but 1 was provided
insert(const_iterator __p, const value_type& __v)
有没有解决这些问题?
最佳答案
添加缺少的operator <
。
另外,从转换运算符的返回类型中删除const
。
编辑在Q中更改后:
您必须将转换更改为
operator std::pair<const FooBar, int>() const
否则,将需要2个用户转换,这是不允许的。
Demo
关于c++ - 使用用户定义的转换创建 map 条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35776299/