任何人都可以帮助我使用下面的代码来显示类对象的内容吗?
Q1 - 任何人都可以确认 - 如果这是将指针存储到地图中的表类对象的正确方法吗?
问题2 - 如何输出地图中整个记录的内容?
由于
#include <iostream>
#include <map>
#include <memory>
#include <string>
class Table
{
public:
int c1, c2, c3;
Table() {}
Table(int _c1,int _c2,int _c3)
{
c1=_c1;
c2=_c2;
c3=_c3;
}
};
int main()
{
std::map<int, std::unique_ptr<Table>> mapTable;
std::unique_ptr<Table> up(new Table(1,2,3));
// Is this correct way to store the pointer?
mapTable.insert(std::make_pair(0,std::move(up)));
// How can I display c1,c2,c3 values here with this iterator?
for (const auto &i : mapTable)
std::cout << i.first << " " << std::endl;
return 0;
}
// How to get the output in the form - 0,1,2,3 ( 0 map key, 1,2,3 are c1,c2,c3 )
// std::cout << i.first << " " << i.second.get() << std::endl; --> incorrect output
答案 0 :(得分:4)
Q1 - 任何人都可以确认 - 如果这是将指针存储到地图中的表类对象的正确方法吗?
是的,这是在容器中存储unique_ptr
的正确方法。唯一指针是不可复制的,因此在将它传递给函数时需要std::move()
- 而你正在这样做。
问题2 - 如何输出地图中整个记录的内容?
除非我遗漏了一些明显的东西,否则你实际上是最难完成的工作。只是做:
for (const auto &i : mapTable)
{
std::cout << i.first << " " << std::endl;
std::cout << i.second->c1 << std::endl;
std::cout << i.second->c2 << std::endl;
std::cout << i.second->c3 << std::endl;
}
迭代器是std::pair<const int, std::unique_ptr<Table>>
的迭代器(这是映射的值类型),因此i.first
提供对密钥的访问,i.second
提供对映射值的访问(在你的情况下,唯一的指针)。