Flesh out OrderedGroups.

1. Add the ability to bulk remove elements.
2. Add accessor for elements_to_group.
3. Early exit in Remove if there are no elements.

Change-Id: I3df1f00de05338a42e9907423b674469a022d3bc
This commit is contained in:
Sameer Agarwal
2014-05-29 13:33:42 -07:00
parent 041f27516a
commit ec3a3ceafc
2 changed files with 60 additions and 5 deletions
+19
View File
@@ -33,6 +33,7 @@
#include <map>
#include <set>
#include <vector>
#include "ceres/internal/port.h"
namespace ceres {
@@ -103,6 +104,20 @@ class OrderedGroups {
return true;
}
// Bulk remove elements. The return value indicates the number of
// elements successfully removed.
int Remove(const vector<T>& elements) {
if (NumElements() == 0 || elements.size() == 0) {
return 0;
}
int num_removed = 0;
for (int i = 0; i < elements.size(); ++i) {
num_removed += Remove(elements[i]);
}
return num_removed;
}
// Reverse the order of the groups in place.
void Reverse() {
typename map<int, set<T> >::reverse_iterator it =
@@ -160,6 +175,10 @@ class OrderedGroups {
return group_to_elements_;
}
const map<T, int>& element_to_group() const {
return element_to_group_;
}
private:
map<int, set<T> > group_to_elements_;
map<T, int> element_to_group_;