[mlpack-git] master: Replace lambdas by a comparator. (1938442)
gitdub at mlpack.org
gitdub at mlpack.org
Tue Jul 12 09:56:43 EDT 2016
Repository : https://github.com/mlpack/mlpack
On branch : master
Link : https://github.com/mlpack/mlpack/compare/e434aee1eab9e3ced97cccd840dd383ef8089acf...81c14d9ec8250f8a2caaf1ac06c4be12fc5fd31f
>---------------------------------------------------------------
commit 1938442b0acd5dc7f4386eefa9a0a68d5c0afb82
Author: Mikhail Lozhnikov <lozhnikovma at gmail.com>
Date: Tue Jul 12 16:56:43 2016 +0300
Replace lambdas by a comparator.
>---------------------------------------------------------------
1938442b0acd5dc7f4386eefa9a0a68d5c0afb82
.../core/tree/rectangle_tree/r_star_tree_split.hpp | 11 +++++
.../tree/rectangle_tree/r_star_tree_split_impl.hpp | 42 +++----------------
.../core/tree/rectangle_tree/x_tree_split.hpp | 12 ++++++
.../core/tree/rectangle_tree/x_tree_split_impl.hpp | 49 ++++------------------
4 files changed, 36 insertions(+), 78 deletions(-)
diff --git a/src/mlpack/core/tree/rectangle_tree/r_star_tree_split.hpp b/src/mlpack/core/tree/rectangle_tree/r_star_tree_split.hpp
index 99bef1e..c3d48c4 100644
--- a/src/mlpack/core/tree/rectangle_tree/r_star_tree_split.hpp
+++ b/src/mlpack/core/tree/rectangle_tree/r_star_tree_split.hpp
@@ -42,6 +42,17 @@ class RStarTreeSplit
*/
template <typename TreeType>
static void InsertNodeIntoTree(TreeType* destTree, TreeType* srcNode);
+
+ /**
+ * Comparator for sorting with std::pair. This comparator works a little bit
+ * faster then the default comparator.
+ */
+ template<typename ElemType>
+ static bool PairComp(const std::pair<ElemType, size_t>& p1,
+ const std::pair<ElemType, size_t>& p2)
+ {
+ return p1.first < p2.first;
+ }
};
} // namespace tree
diff --git a/src/mlpack/core/tree/rectangle_tree/r_star_tree_split_impl.hpp b/src/mlpack/core/tree/rectangle_tree/r_star_tree_split_impl.hpp
index 77bedba..7d6224f 100644
--- a/src/mlpack/core/tree/rectangle_tree/r_star_tree_split_impl.hpp
+++ b/src/mlpack/core/tree/rectangle_tree/r_star_tree_split_impl.hpp
@@ -76,12 +76,7 @@ void RStarTreeSplit::SplitLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
std::vector<size_t> pointIndices(p);
for (size_t i = 0; i < p; i++)
@@ -119,12 +114,7 @@ void RStarTreeSplit::SplitLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
// We'll store each of the three scores for each distribution.
std::vector<ElemType> areas(tree->MaxLeafSize() - 2 * tree->MinLeafSize() +
@@ -203,12 +193,7 @@ void RStarTreeSplit::SplitLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
TreeType* treeOne = new TreeType(tree->Parent());
TreeType* treeTwo = new TreeType(tree->Parent());
@@ -368,12 +353,7 @@ bool RStarTreeSplit::SplitNonLeafNode(TreeType *tree,std::vector<bool>& relevels
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
// We'll store each of the three scores for each distribution.
std::vector<ElemType> areas(tree->MaxNumChildren() -
@@ -456,12 +436,7 @@ bool RStarTreeSplit::SplitNonLeafNode(TreeType *tree,std::vector<bool>& relevels
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
// We'll store each of the three scores for each distribution.
std::vector<ElemType> areas(tree->MaxNumChildren() -
@@ -552,12 +527,7 @@ bool RStarTreeSplit::SplitNonLeafNode(TreeType *tree,std::vector<bool>& relevels
}
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
TreeType* treeOne = new TreeType(tree->Parent());
TreeType* treeTwo = new TreeType(tree->Parent());
diff --git a/src/mlpack/core/tree/rectangle_tree/x_tree_split.hpp b/src/mlpack/core/tree/rectangle_tree/x_tree_split.hpp
index efa6242..ecdc060 100644
--- a/src/mlpack/core/tree/rectangle_tree/x_tree_split.hpp
+++ b/src/mlpack/core/tree/rectangle_tree/x_tree_split.hpp
@@ -52,6 +52,18 @@ class XTreeSplit
*/
template<typename TreeType>
static void InsertNodeIntoTree(TreeType* destTree, TreeType* srcNode);
+
+ /**
+ * Comparator for sorting with std::pair. This comparator works a little bit
+ * faster then the default comparator.
+ */
+ template<typename ElemType>
+ static bool PairComp(const std::pair<ElemType, size_t>& p1,
+ const std::pair<ElemType, size_t>& p2)
+ {
+ return p1.first < p2.first;
+ }
+
};
} // namespace tree
diff --git a/src/mlpack/core/tree/rectangle_tree/x_tree_split_impl.hpp b/src/mlpack/core/tree/rectangle_tree/x_tree_split_impl.hpp
index 7b1f62d..65038e8 100644
--- a/src/mlpack/core/tree/rectangle_tree/x_tree_split_impl.hpp
+++ b/src/mlpack/core/tree/rectangle_tree/x_tree_split_impl.hpp
@@ -75,12 +75,7 @@ void XTreeSplit::SplitLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
std::vector<size_t> pointIndices(p);
for (size_t i = 0; i < p; i++)
@@ -129,12 +124,7 @@ void XTreeSplit::SplitLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
// We'll store each of the three scores for each distribution.
std::vector<ElemType> areas(tree->MaxLeafSize() -
@@ -210,12 +200,7 @@ void XTreeSplit::SplitLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
TreeType* treeOne = new TreeType(tree->Parent(),
tree->AuxiliaryInfo().NormalNodeMaxNumChildren());
@@ -390,12 +375,7 @@ bool XTreeSplit::SplitNonLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
// We'll store each of the three scores for each distribution.
std::vector<ElemType> areas(tree->MaxNumChildren() -
@@ -500,12 +480,7 @@ bool XTreeSplit::SplitNonLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted[i].second = i;
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
// We'll store each of the three scores for each distribution.
std::vector<ElemType> areas(tree->MaxNumChildren() -
@@ -619,12 +594,7 @@ bool XTreeSplit::SplitNonLeafNode(TreeType *tree,std::vector<bool>& relevels)
}
}
- std::sort(sorted.begin(), sorted.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted.begin(), sorted.end(), PairComp<ElemType>);
TreeType* treeOne = new TreeType(tree->Parent(), tree->MaxNumChildren());
TreeType* treeTwo = new TreeType(tree->Parent(), tree->MaxNumChildren());
@@ -688,12 +658,7 @@ bool XTreeSplit::SplitNonLeafNode(TreeType *tree,std::vector<bool>& relevels)
sorted2[i].second = i;
}
}
- std::sort(sorted2.begin(), sorted2.end(),
- [] (const std::pair<ElemType, size_t>& p1,
- const std::pair<ElemType, size_t>& p2)
- {
- return p1.first < p2.first;
- });
+ std::sort(sorted2.begin(), sorted2.end(), PairComp<ElemType>);
for (size_t i = 0; i < tree->NumChildren(); i++)
{
More information about the mlpack-git
mailing list