java map vector_迭代并比较map <string,vector <string >> c中的值

我使用boost :: filesystem库在c 17中编写了一个程序,该库将路径作为参数并返回一个映射:

map>

其中每个键都是一个目录(boost :: filesystem :: path转换为字符串),每个目录中的每个文件都被推送到值向量 .

首先,我从作为参数给出的路径创建路径向量:

// Method to create vector of paths

vector InToVecsOne(path p, vector v1)

{

for(auto entry : recursive_directory_iterator(p))

{

if(is_directory(entry))

{

v1.push_back(entry);

}

}

return v1;

}

然后,我使用向量创建 Map ,如下所示:

// Function takes a vector of paths and returns map of key-value pair path-vector

map> FileMap(vector v1,

map> m, vector v2)

{

for(auto p : v1)

{

// iterate over each entry in path p

for(auto entry : directory_iterator(p))

{

if(is_regular_file(entry) == true)

{

// add file to vector

v2.push_back(basename(entry) + " ");

}

}

// convert path to pathname (DirX) string

string pathname = basename(p);

m.insert(make_pair(pathname, v2));

v2.erase(v2.begin(), v2.end()); // remove contents after iterating

}

return m;

}

使用我的沙箱目录作为测试路径,在打印 Map 内容时得到以下输出:

DirA: Z X Y

DirB: Z X Y

DirBB: X Y YY

DirC: Z

DirCC: ZZ X Y YY

值得注意的是,键是DirA,DirB,DirBB等,值是Z,X,Y等 .

我现在要做的是转换东西,使我的输出看起来像:

X : DirA, DirB, DirBB, DirCC

Y : DirA, DirB, DirBB, DirCC

等等

我认为最好的方法是:1 . 重写map方法,或2.迭代map中的内容,比较值是否与键相关联并将此值添加到新数据结构 .

我不确定哪个会更容易,或者第二个会是什么样子,因此需要一些建议 .

谢谢 .

延期:

在注释创建文件名路径对的映射后,我在从上面的旧映射创建这个新映射后遇到了一个新问题 . 我的功能如下:

// Make new map where file is key, and dir is value. m1 is old map, m2 is new map

map> FinalMap(map> m1,

map> m2, vector dirnames)

{

// iterate over each key

for(map>::const_iterator it = m1.begin(); it != m1.end(); ++it)

{

string dirname = it->first;

dirnames.push_back(dirname);

vector files = it->second;

// iterate over elements in vector files

for(auto i : files)

{

m2.insert(make_pair(i, dirnames));

}

dirnames.erase(dirnames.begin(), dirnames.end());

}

return m2;

}

但是,现在我的输出如下:

X : DirA

Y : DirA

YY : DirBB

Z : DirA

ZZ : DirCC

我需要它:

X : DirA, DirB, DirBB

假设文件X在DirA,DirB和DirBB中 . 因此,我必须改变函数FileMap .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值