[PPL-devel] [GIT] ppl/ppl(sparse_matrices): PIP_Tree.cc: use std::vector instead of std ::set in find_lexico_minimum_column().

Marco Poletti poletti.marco at gmail.com
Wed Mar 24 14:45:18 CET 2010


Module: ppl/ppl
Branch: sparse_matrices
Commit: 54ade0980f342b457c2fb9daa9a9a2764d8d95db
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=54ade0980f342b457c2fb9daa9a9a2764d8d95db

Author: Marco Poletti <poletti.marco at gmail.com>
Date:   Wed Mar 24 14:45:17 2010 +0100

PIP_Tree.cc: use std::vector instead of std::set in find_lexico_minimum_column().

---

 src/PIP_Tree.cc |   27 +++++++++++++++------------
 1 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index ed775ea..c838a45 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -346,7 +346,7 @@ column_lower(const PIP_Tree_Node::matrix_type& tableau,
   index(es).
 */
 void
-find_lexico_minimum_column_in_set(std::set<dimension_type>& candidates,
+find_lexico_minimum_column_in_set(std::vector<dimension_type>& candidates,
                                   const PIP_Tree_Node::matrix_type& tableau,
                                   const std::vector<dimension_type>& mapping,
                                   const std::vector<bool>& basis,
@@ -355,12 +355,14 @@ find_lexico_minimum_column_in_set(std::set<dimension_type>& candidates,
   const dimension_type num_vars = mapping.size();
 
   PPL_ASSERT(!candidates.empty());
+  // This is used as a set, it is always sorted.
+  std::vector<dimension_type> new_candidates;
   for (dimension_type var_index = 0; var_index < num_vars; ++var_index) {
-    std::set<dimension_type> new_candidates;
-    std::set<dimension_type>::const_iterator i = candidates.begin();
-    std::set<dimension_type>::const_iterator i_end = candidates.end();
+    new_candidates.clear();
+    std::vector<dimension_type>::const_iterator i = candidates.begin();
+    std::vector<dimension_type>::const_iterator i_end = candidates.end();
     PPL_ASSERT(!candidates.empty());
-    new_candidates.insert(*i);
+    new_candidates.push_back(*i);
     dimension_type min_column = *i;
     ++i;
     if (i == i_end)
@@ -391,10 +393,10 @@ find_lexico_minimum_column_in_set(std::set<dimension_type>& candidates,
             new_candidates.clear();
             min_column = *i;
             sij_b = &sij_a;
-            new_candidates.insert(min_column);
+            new_candidates.push_back(min_column);
           } else
             // Optimizing for: lhs == 0 && rhs == 0;
-            new_candidates.insert(*i);
+            new_candidates.push_back(*i);
         }
       }
     } else {
@@ -440,7 +442,7 @@ find_lexico_minimum_column_in_set(std::set<dimension_type>& candidates,
             min_column = *i;
             row_jb = row_ja;
             sij_b = &sij_a;
-            new_candidates.insert(min_column);
+            new_candidates.push_back(min_column);
           }
         } else {
           // lhs is actually the left-hand side with toggled sign.
@@ -448,14 +450,14 @@ find_lexico_minimum_column_in_set(std::set<dimension_type>& candidates,
           lhs = *sij_b * *row_ja;
           rhs = sij_a * *row_jb;
           if (lhs == rhs)
-            new_candidates.insert(*i);
+            new_candidates.push_back(*i);
           else
             if (lhs < rhs) {
               new_candidates.clear();
               min_column = *i;
               row_jb = row_ja;
               sij_b = &sij_a;
-              new_candidates.insert(min_column);
+              new_candidates.push_back(min_column);
             }
         }
       }
@@ -477,11 +479,12 @@ find_lexico_minimum_column(const PIP_Tree_Node::matrix_type& tableau,
                            const dimension_type start_j,
                            dimension_type& j_out) {
   const dimension_type num_cols = tableau.num_columns();
-  std::set<dimension_type> candidates;
+  // This is used as a set, it is always sorted.
+  std::vector<dimension_type> candidates;
   for (dimension_type j = start_j; j < num_cols; ++j) {
     const Coefficient& c = pivot_row[j];
     if (c > 0)
-      candidates.insert(j);
+      candidates.push_back(j);
   }
   if (candidates.empty()) {
     j_out = num_cols;




More information about the PPL-devel mailing list