返回数字所在的行

时间:2015-09-08 08:02:23

标签: c++ linux loops grep

我的下一个文件包含数千行

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 ++的循环中思考什么?

2 个答案:

答案 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 是行号,您只需将其添加到行的每个数字的哈希表中。最后,您以数字方式对哈希表的键进行排序并打印相应的数组。