diff --git a/include/tc/core.hpp b/include/tc/core.hpp index 147935c..b8cfd4e 100644 --- a/include/tc/core.hpp +++ b/include/tc/core.hpp @@ -115,10 +115,10 @@ namespace tc { }; struct SubGroup : public Group { - const std::vector gen_map; + std::vector gen_map; const Group &parent; - SubGroup(const Group &parent, const std::vector &gen_map); + SubGroup(const Group &parent, std::vector gen_map); }; Group operator*(const Group &g, const Group &h); diff --git a/src/core.cpp b/src/core.cpp index 00346b0..5dbe99b 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -136,8 +136,11 @@ namespace tc { return g; } - SubGroup::SubGroup(const Group &parent, const std::vector &gen_map) - : Group(gen_map.size()), parent(parent), gen_map(gen_map) { + SubGroup::SubGroup(const Group &parent, std::vector gen_map) + : Group(gen_map.size()), parent(parent) { + + std::sort(gen_map.begin(), gen_map.end()); + this->gen_map = gen_map; for (size_t i = 0; i < gen_map.size(); ++i) { for (size_t j = 0; j < gen_map.size(); ++j) { diff --git a/src/solve.cpp b/src/solve.cpp index f56f51a..948eec2 100644 --- a/src/solve.cpp +++ b/src/solve.cpp @@ -67,6 +67,11 @@ namespace tc { Cosets Group::solve(const std::vector &sub_gens) const { Cosets cosets(ngens); cosets.add_row(); + + if (ngens == 0) { + return cosets; + } + for (int g : sub_gens) { cosets.put(g, 0); }