如何從矩陣中獲取子集矩陣?
例如,第 3 列中的值 = 4?
vector<vector<int>> items =
{
// uID, q*, p*, t
{1,3,1,9866},
{2,1,2,5258},
{3,2,4,5788},
{4,2,4,6536},
{5,2,4,6534},
};
結果:
results =
{
// uID, q*, p*, t
{3,2,4,5788},
{4,2,4,6536},
{5,2,4,6534},
};
uj5u.com熱心網友回復:
你可以使用std::copy_if:
#include <algorithm> // std::copy_if
#include <iterator> // std::back_inserter
//...
// the resulting vector:
std::vector<std::vector<int>> results;
// copy those inner vectors where column 3 == 4:
std::copy_if(items.begin(), items.end(), std::back_inserter(results),
[](const std::vector<int>& inner){
return inner.size() >= 3 && inner[2] == 4;
});
演示
uj5u.com熱心網友回復:
另一種方法是簡單地回圈items選擇第三個元素所在的行4并使用.push_back()該行將該行添加到新的std::vector<std::vector<int>>,例如
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<int>> items =
{
// uID, q*, p*, t
{1,3,1,9866},
{2,1,2,5258},
{3,2,4,5788},
{4,2,4,6536},
{5,2,4,6534},
},
results{};
for (const auto& row : items) { /* loop over all rows of items */
if (row[2] == 4) /* select rows where 3rd col == 4 */
results.push_back(row); /* add row to results */
}
for (const auto& row : results) { /* output results */
for (const auto& col : row)
std::cout << " " << col;
std::cout.put('\n');
}
}
示例使用/輸出
./bin/select_from_vv
3 2 4 5788
4 2 4 6536
5 2 4 6534
另請參閱為什么“使用命名空間 std;” 被認為是不好的做法?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388776.html
標籤:C
下一篇:無法除錯COM互操作DLL
