diff options
Diffstat (limited to 'extern/ceres/include/ceres/ordered_groups.h')
-rw-r--r-- | extern/ceres/include/ceres/ordered_groups.h | 47 |
1 files changed, 18 insertions, 29 deletions
diff --git a/extern/ceres/include/ceres/ordered_groups.h b/extern/ceres/include/ceres/ordered_groups.h index aa1bd3a7da1..954663c97e6 100644 --- a/extern/ceres/include/ceres/ordered_groups.h +++ b/extern/ceres/include/ceres/ordered_groups.h @@ -1,5 +1,5 @@ // Ceres Solver - A fast non-linear least squares minimizer -// Copyright 2015 Google Inc. All rights reserved. +// Copyright 2019 Google Inc. All rights reserved. // http://ceres-solver.org/ // // Redistribution and use in source and binary forms, with or without @@ -33,7 +33,9 @@ #include <map> #include <set> +#include <unordered_map> #include <vector> + #include "ceres/internal/port.h" #include "glog/logging.h" @@ -63,8 +65,7 @@ class OrderedGroups { return false; } - typename std::map<T, int>::const_iterator it = - element_to_group_.find(element); + auto it = element_to_group_.find(element); if (it != element_to_group_.end()) { if (it->second == group) { // Element is already in the right group, nothing to do. @@ -126,17 +127,14 @@ class OrderedGroups { return; } - typename std::map<int, std::set<T> >::reverse_iterator it = - group_to_elements_.rbegin(); - std::map<int, std::set<T> > new_group_to_elements; + auto it = group_to_elements_.rbegin(); + std::map<int, std::set<T>> new_group_to_elements; new_group_to_elements[it->first] = it->second; int new_group_id = it->first + 1; for (++it; it != group_to_elements_.rend(); ++it) { - for (typename std::set<T>::const_iterator element_it = it->second.begin(); - element_it != it->second.end(); - ++element_it) { - element_to_group_[*element_it] = new_group_id; + for (const auto& element : it->second) { + element_to_group_[element] = new_group_id; } new_group_to_elements[new_group_id] = it->second; new_group_id++; @@ -148,8 +146,7 @@ class OrderedGroups { // Return the group id for the element. If the element is not a // member of any group, return -1. int GroupId(const T element) const { - typename std::map<T, int>::const_iterator it = - element_to_group_.find(element); + auto it = element_to_group_.find(element); if (it == element_to_group_.end()) { return -1; } @@ -157,27 +154,21 @@ class OrderedGroups { } bool IsMember(const T element) const { - typename std::map<T, int>::const_iterator it = - element_to_group_.find(element); + auto it = element_to_group_.find(element); return (it != element_to_group_.end()); } // This function always succeeds, i.e., implicitly there exists a // group for every integer. int GroupSize(const int group) const { - typename std::map<int, std::set<T> >::const_iterator it = - group_to_elements_.find(group); - return (it == group_to_elements_.end()) ? 0 : it->second.size(); + auto it = group_to_elements_.find(group); + return (it == group_to_elements_.end()) ? 0 : it->second.size(); } - int NumElements() const { - return element_to_group_.size(); - } + int NumElements() const { return element_to_group_.size(); } // Number of groups with one or more elements. - int NumGroups() const { - return group_to_elements_.size(); - } + int NumGroups() const { return group_to_elements_.size(); } // The first group with one or more elements. Calling this when // there are no groups with non-zero elements will result in a @@ -187,17 +178,15 @@ class OrderedGroups { return group_to_elements_.begin()->first; } - const std::map<int, std::set<T> >& group_to_elements() const { + const std::map<int, std::set<T>>& group_to_elements() const { return group_to_elements_; } - const std::map<T, int>& element_to_group() const { - return element_to_group_; - } + const std::map<T, int>& element_to_group() const { return element_to_group_; } private: - std::map<int, std::set<T> > group_to_elements_; - std::map<T, int> element_to_group_; + std::map<int, std::set<T>> group_to_elements_; + std::unordered_map<T, int> element_to_group_; }; // Typedef for the most commonly used version of OrderedGroups. |