如何显示地图stl中包含的列表

时间:2015-02-03 11:34:24

标签: c++ file stl

在地图中,如果值本身就是一个列表,那么我们如何显示它。

键: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_;
};

3 个答案:

答案 0 :(得分:0)

如果您的地图位于intstd::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的迭代器