找出(x,y)坐标的列表是矩阵中的一行还是列
Find out If a list of (x,y) coordinates span a row or column in a matrix
所以,我有x,y coordiates的列表。我想找出该坐标列表是否跨越值的矩阵的所有行,而对于列。
。即。
T F F F
T T F F
F T F F
F T T F
在这里,T组作为坐标提供,因此类似于[(0,0),(0,1),(1,1),(1,2),(1,3),(2,3)]
。如何使用这些坐标来找出它们描述的集合跨度的所有行?这也适用于列以及两者(因此,该集合是否跨越行和列)。
当前,值存储为vector<vector<coord>>
,其中坐标是一个类似的结构:
struct coord {
int x, int y;
}
假设您所拥有的只是矩阵(m x n = row x column
的大小)和在坐标中的T
的位置(std::vector<std::vector<coord>>
),您可以做:
std::vector<std::vector<coord>> Ts_pos;
std::set<int> rows;
std::set<int> cols;
bool spansRow = false;
bool spansCol = false;
for (int i = 0; i < Ts_pos.size(); i++)
{
for (int j = 0; j < Ts_pos[i].size(); j++)
{
item = Ts_pos[i][j];
cols.insert(item.x);
rows.insert(item.y);
}
}
if (rows.size() == numRows) spansRow = true;
if (cols.size() == numCols) spansCol = true;
执行循环后,两个set
将包含行的索引编号和T t触摸的列的索引编号,即:考虑,在您中,在您的范围内,第一个T。它具有坐标(0,0),以便它用索引0触摸列,并带有索引0的行,因此您可以在行集中插入0,在COL集合中插入0。然后,您考虑列表中的第二个t,依此类推。
在循环外,您可以发现是否触摸了所有行,只需查询行集的大小即可。如果它等于矩阵的行数,则至少触摸了所有行,并且T的集合跨越了矩阵。与列集相同。
然后,您可以根据spansRow
和spansCol
的值std::cout
。
我们可以将所有x坐标和所有y坐标存储在单独的向量中,对这些向量进行排序,然后检查是否来自 0-N 的值每个向量(其中n是X-Vector的n。
缺少值,值范围小于 n ,从大于0开始等值,将为我们提供答案,该设置是否跨越行和列。
您只需要删除x
s和 y
s,然后将它们与所需的索引进行比较。例如
std::set<int> required = { 0, 1, 2, 3 }; // values that must be present
bool spans_direction(const std::vector<coord> & coords, std::function<int(coord)> projection)
{
std::set<int> projected;
std::transform(coords.begin(), coords.end(), std::inserter(projected, projected.end()), projection);
return projected == required;
}
bool spans_cols(const std::vector<coord> & coords)
{
return spans_direction(coords, [](coord c) { return c.x; });
}
bool spans_rows(const std::vector<coord> & coords)
{
return spans_direction(coords, [](coord c) { return c.y; });
}
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 从C++dll访问C#中的一行主要参数
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 找出(x,y)坐标的列表是矩阵中的一行还是列
- 获取一行字符串并转换为浮点列表
- QTableView - 将指针(突出显示所选内容)放在列表的第一行
- 是否可以在一行中创建一个std::列表,指定其值(c++)
- 如何将文件中的一行数字读入列表