本文整理汇总了C++中VertexList::at方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexList::at方法的具体用法?C++ VertexList::at怎么用?C++ VertexList::at使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexList
的用法示例。
在下文中一共展示了VertexList::at方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: makeTree
NodePtr KDTree::makeTree(size_t depth, const size_t& cellSize, VertexLists& t,
const Domain& domain){
/*
* Tuple contains x, y, z Dimensions Vertex list
*
*/
const size_t k = depth % m_K;
VertexList vertices = t.at(k);
if(vertices.size() == 0){
return nullptr;
}
if(vertices.size() <= cellSize){
return NodePtr(new Node(vertices, domain));
}
size_t median = (int) (vertices.size()-1)/2;
VertexPtr& posElement = vertices.at(median);
//Split lists by median element
std::vector< ListPair > pairs;
for(size_t i=0; i<m_K; ++i){
pairs.push_back(splitListBy(k, t.at(i), posElement));
}
VertexLists left;
VertexLists right;
for(ListPair pair: pairs){
left.push_back(std::get<0>(pair));
right.push_back(std::get<1>(pair));
}
Domain leftBounds = domain;
Domain rightBounds = domain;
leftBounds.updateMax((*posElement)[k], k);
rightBounds.updateMin((*posElement)[k], k);
NodePtr leftNode;
NodePtr rightNode;
if(depth < 2){
thread lT([&] { leftNode = makeTree(depth+1, cellSize, left, leftBounds); });
thread rT([&] { rightNode = makeTree(depth+1, cellSize, right, rightBounds); });
lT.join();
rT.join();
}else{
leftNode = makeTree(depth+1, cellSize, left, leftBounds);
rightNode = makeTree(depth+1, cellSize, right, rightBounds);
}
return NodePtr(new Node(leftNode, rightNode, domain));
};