添加字符串和列表到c++中的映射
adding string and list to map in c++
我是c++的新手。我试图在cpp中添加一个dragon对象,但在添加对象时收到错误
#include "dragon.h"
using std::cin;
#include <map>
using std::map;
#include <list>
#include <string>
#include <iostream>
using namespace std;
using std::list;
typedef map<string,list<Dragon> >::iterator iter;
typedef map<const string,list<Dragon> >::value_type dmaptype;
void display(map<string,list<Dragon> > dmap1,iter dmapiter1);
int main( )
{
map<string,list<Dragon> >dmap;
iter dmapiter;
bool again = true;
string name;
double length;
string colour;
string location;
while( again )
{
// get the details for the dragon
cout << "nEnter dragon name >> ";
getline( cin, name );
cout << "nEnter dragon length >> ";
cin >> length;
cin.get( );
cout << "nEnter dragon colour >> ";
getline( cin, colour );
// now get the location
cout << "nEnter location >> ";
getline( cin, location );
dmapiter=dmap.find(location);
Dragon * ptr ;
ptr=new Dragon(name,length,colour);
if(dmapiter==dmap.end())
{
list<Dragon*> dlist;
dlist.push_back(ptr);
dmap.insert(dmaptype(location, dlist));
}
else
{
dmapiter->second.push_back(*ptr);
}
char choice;
cout << "nEnter another dragon and location [ y / n ] ? ";
cin >> choice;
cin.get( );
if( choice != 'y' && choice != 'Y' )
{
again = false;
}
}
display(dmap,dmapiter);
cout << endl;
return 0;
}
当我编译程序时,我收到一个错误:
dmap.insert(dmaptype(location, dlist));
错误为:
error: no matching function for call to ‘std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::list<Dragon, std::allocator<Dragon> > >::pair(std::string&, std::list<Dragon*, std::allocator<Dragon*> >&)’
/usr/lib/gcc/i686-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_pair.h:83: note: candidates are: std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _T2 = std::list<Dragon, std::allocator<Dragon> >]
/usr/lib/gcc/i686-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_pair.h:79: note: std::pair<_T1, _T2>::pair() [with _T1 = const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _T2 = std::list<Dragon, std::allocator<Dragon> >]
/usr/lib/gcc/i686-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stl_pair.h:68: note: std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::list<Dragon, std::allocator<Dragon> > >::pair(const std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::list<Dragon, std::allocator<Dragon> > >&)
任何帮助都将不胜感激。。。
感谢
尝试:
dmap.insert(std::make_pair(location, dlist));
但您也需要使数据列表的类型与地图的类型一致——两者都使用list<Dragon>
或list<Dragon*>
。
为了简单起见(所以您不必担心删除),请先尝试list<Dragon>
。当你插入到这个列表中时,会产生一个副本(因为STL有值语义),所以如果你在堆栈上本地创建一个Dragon来插入到dlist中也是可以的。(你可以把它看作是一个正在制作的副本:如果编译器很聪明,可能会出现副本省略,但现在不要担心)。
例如:
Dragon dragon(name,length,colour);
if(dmapiter==dmap.end())
{
list<Dragon> dlist;
dlist.push_back(dragon);
dmap.insert(make_pair(location, dlist));
}
else
{
dmapiter->second.push_back(dragon);
}
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- 在c++中访问int到类对象的映射时出错
- 在C++中搜索嵌套多映射值
- 错误处理.将系统错误代码映射到泛型
- C++匿名结构作为std::映射值
- 如何从存储在std::映射中的std::集中删除元素
- 递归无序映射
- 正在VS调试器中监视映射条目