提取和排序数组中的数据?

姆米克

这是我的数组:

int grid[gridsize+1] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 2, 2, 4, 1, 5, 3, 3, 6, 2, 6, 4, 5, 5, 5, 3, 6, 2, 6, 4, 4, 5, 5, 5, 6, 6, 6, 4, 7, 7, 8, 5, 8, 8, 8, 4, 7, 7, 8, 8, 8, 8, 8, 4, 7, 7, 7, 7, 8, 8, 8 };

每个数字代表一种颜色,我想为每个唯一数字创建多个数组。创建的数组将存储原始数组中该编号的位置。

例如

colour1[5]
[0]=0       //because the number 1 is stored in element 0.
[1]=1
[2]=8
[3]=9

每次运行时,网格中的数字都会改变,所以事情需要动态吗?我可以编写实现此目的的低效率代码,但这只是重复性的,我无法理解将其转化为可以放入函数中的方式。

这就是我所拥有的;

int target_number = 1
grid_size = 64;
int counter = -1;
int counter_2 = -1;
int colour_1;
while (counter < grid_size + 1){
   counter = counter + 1;
   if (grid[counter] == target)
       counter_2 = counter_2 + 1;
       colour_1[counter_2] = counter;
   }
}

我必须为每种颜色执行此操作,当我尝试创建一个函数时,它无法访问main中的主数组,因此是无用的。

安东·萨文(Anton Savin)

您可以使用vector<vector<int>>代表您的柜台。无需地图或排序。

编辑:添加了额外的步骤以确定最大颜色,因此不需要运行时调整大小。

这是代码:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    int grid[] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, /*...*/};
    const size_t gridSize = std::end(grid) - std::begin(grid);
    int maxColor = *std::max_element(std::begin(grid), std::end(grid));
    std::vector<std::vector<int>> colorPos(maxColor);

    for (size_t i = 0; i < gridSize; ++i)
        colorPos[grid[i] - 1].push_back(i);

    for (size_t i = 0; i < colorPos.size(); ++i) {
        std::cout << (i + 1) << ": ";
        for (int p : colorPos[i])
            std::cout << p << ' ';
        std::cout << std::endl;
    }

    return 0;
}

输出:

1: 0 1 8 9 10 17
2: 2 3 4 5 6 7 14 15 22 30
3: 11 12 13 19 20 28
4: 16 24 32 33 40 48 56
5: 18 25 26 27 34 35 36 44
6: 21 23 29 31 37 38 39
7: 41 42 49 50 57 58 59 60
8: 43 45 46 47 51 52 53 54 55 61 62 63

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章