我的下一个文件包含数千行
1 2 3 4
1 4 5
6
5 6 8 9
5
2 4 7 9
5 8 10
1 3 5 9
.......
每一行(行号代表区域)最多有4个值(代表标签),这些值介于0和1000之间。
我想知道哪些行(区域)是值(标签)并对它们进行排序,为此我需要一个循环,但我不知道如何。 例如,对于标签号1,在行(区域)1,2和8中找到,因此输出必须为1:1 2 8
我想要这个输出:
1:1 2 8
2:1 6
3:1 8
4:1 2 6
5:2 4 5 7 8
6:3 4
7:6
8:4 7
9:4 6 8
10:7
....
输出是从0到1000的排序标签以及找到它们的区域。
我想在Linux或c ++的循环中思考什么?
答案 0 :(得分:1)
您可以std::map<int, std::list<int>>
将int
映射到list<int>
。
对于每个值使用:
auto iter = map.find(row);
if (iter != m.end() )
{
(iter->second).push_back(val);
} else {
map[row] = std::list<int>(1, val);
}
然后使用iterator
并打印最后的所有键值对。
答案 1 :(得分:0)
Perl救援:
div
perl -lne 'push @{ $h{$_} }, $. for split
}{
print "$_: @{ $h{$_} }" for sort { $a <=> $b } keys %h
' < input.txt
是行号,您只需将其添加到行的每个数字的哈希表中。最后,您以数字方式对哈希表的键进行排序并打印相应的数组。