在地图中,如果值本身就是一个列表,那么我们如何显示它。
键:1值:1,2,3(列表)
键:2值:4,5,6(列表)
void somefunction()
{
cout << "Key: " << pos->first << endl;
cout << "Value:" << pos->second << endl;
}
但如果pos-&gt; second包含List,如何显示它?
我有一个函数,我存储所有目录及其相应的文件。
我在显示VALUE地图时遇到问题。我已经调试并观察到相应的值被正确存储但我无法显示它。由于map的value部分本身就是一个pathiterator列表。每当我在不同的目录中获得相同的文件名时,我将在相应的键(文件名)对应的地图中存储引用或路径。
class FileMgr
{
public:
using path_1 = std::string;
using paths_1 = std::set<path_1>;
using pathiter = paths_1::iterator;
using listofiter = std::list<pathiter>;
using file = std::string;
using store = std::map<file, listofiter>;
using store_iter = store::iterator;
paths_1 pp;
pathiter oo;
listofiter l1;
store s6;
store_iter d;
void addPattern(const std::string& patt)
{
if (patterns_.size() == 1 && patterns_[0] == "*.*")
patterns_.pop_back();
patterns_.push_back(patt);
}
void search()
{
for (recursive_directory_iterator i("."), end; i != end; ++i)
{
pp.insert(i->path().parent_path());
oo = pp.find(i->path().parent_path());
if (!is_directory(i->path()))
{
s6[i->path().filename()].push_back(oo);
}
}
for ( d = s6.begin(); d != s6.end(); d++)
{
cout << "Key: " << d->first << " Value: ";
std::cout << "Value:";
for (auto& x : d->second)
std::cout << ' ' << x;
//^^Red Squiggly here ERROR
std::cout << '\n';
}
}
private:
std::string path_;
DataStore& store_;
patterns patterns_;
};
答案 0 :(得分:0)
如果您的地图位于int
和std::list<int>
之间,那么
std::map<int, std::list<int>> map_list ;
int key ;
std::list<int> val = map_list[key] ;
for(int x : val)
std::cout << x << " " ; // printing each element in list
将在key
显示整个列表。
答案 1 :(得分:0)
不要让地图方面分散您的注意力 - 您只需使用pos->second
,否则您将使用任何list
对象 - 如下所示:
std::cout << "Value:";
for (auto& x : pos->second)
std::cout << ' ' << x;
std::cout << '\n';
答案 2 :(得分:0)
list<int> l;
map<int,list<int> > m;
.
.
.
.
list<int>::iterator i;
map<int,list<int> > ::iterator mitr=m.begin();
while(mitr!=m.end())
{
l=mitr->second;
i=l.begin();
while(i!=l.end())
{
cout<<*i<<" ";
i++;
}
mitr++;
}
此处i
是用于迭代地图中每个list
的迭代器