std::get<0>(info)使用,tuple使用,array使用

本文通过C++代码示例介绍了如何使用标准库中的元组(tuple)和数组(array)进行数据初始化、获取和设置操作。展示了元组用于不同类型的组合数据结构,以及数组在固定大小整数集合中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <tuple>
#include <array>
 
int main()
{
    typedef std::tuple<int, int, int, std::string, std::string> DATA_INFO;
    //initialization value
    const DATA_INFO info(28, 28, 10, "data", "prob");
    
    // get values:
    std::cout << "(" << std::get<0>(info) << ", " << std::get<1>(info)
              << ", " << std::get<2>(info) << ", " << std::get<3>(info) 
              << ", " << std::get<4>(info) << ")\n";
    
    
    std::array<int, 3> arr;
    
    // set values:
    std::get<0>(arr) = 1;
    std::get<1>(arr) = 2;
    std::get<2>(arr) = 3;
 
    // get values:
    std::cout << "(" << std::get<0>(arr) << ", " << std::get<1>(arr)
              << ", " << std::get<2>(arr) << ")\n";
}

运行结果:

(28, 28, 10, data, prob)
(1, 2, 3)

 

using GridKey = std::tuple<int, int, int>; struct GridHash { size_t operator()(const GridKey& k) const { auto hash_int = std::hash<int>(); return hash_int(std::get<0>(k)) ^ (hash_int(std::get<1>(k)) << 1) ^ (hash_int(std::get<2>(k)) << 2); } }; void buildSpatialGrid(const std::vector<Point3d>& points,std::unordered_map<GridKey, std::vector<size_t>, GridHash>& gridMap, double cellSize) { gridMap.clear(); for (size_t i = 0; i < points.size(); ++i) { int x = std::floor(points[i].X / cellSize); int y = std::floor(points[i].Y / cellSize); int z = std::floor(points[i].Z / cellSize); gridMap[{x, y, z}].push_back(i); } } bool adjustWithGrid(std::vector<Point3d>& vec, double min_dist, int max_iters) { const double cell_size = min_dist; const double min_dist_sq = min_dist * min_dist; bool adjusted = false; for (int iter = 0; iter < max_iters; ++iter) { std::unordered_map<GridKey, std::vector<size_t>, GridHash> gridMap; buildSpatialGrid(vec, gridMap, cell_size); bool current_adjusted = false; for (size_t i = 0; i < vec.size(); ++i) { const auto& p = vec[i]; int gx = std::floor(p.X / cell_size); int gy = std::floor(p.Y / cell_size); int gz = std::floor(p.Z / cell_size); // 检测当前网格及26个相邻网格 for (int dx = -1; dx <= 1; ++dx) { for (int dy = -1; dy <= 1; ++dy) { for (int dz = -1; dz <= 1; ++dz) { GridKey key(gx + dx, gy + dy, gz + dz); if (gridMap.find(key) == gridMap.end()) continue; for (auto j : gridMap.at(key)) { if (j <= i) continue; // 避免重复检测 Point3d& p1 = vec[i]; Point3d& p2 = vec[j]; double dx = p2.X - p1.X; double dy = p2.Y - p1.Y; double dz = p2.Z - p1.Z; double dist_sq = dx * dx + dy * dy + dz * dz; if (dist_sq < min_dist_sq && dist_sq > 0) { double dist = std::sqrt(dist_sq); double delta = (min_dist - dist) / dist; double move = 0.5 * delta; p1.X -= dx * move; p1.Y -= dy * move; p1.Z -= dz * move; p2.X += dx * move; p2.Y += dy * move; p2.Z += dz * move; current_adjusted = true; } } } } } } if (!current_adjusted) break; adjusted = true; } return adjusted; } std::map<tag_t, Point3d>mapFaceCylPoint;使用八叉树或网格划分空间,仅检测相邻区域内的点对。(c++)
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值