repairer dispatcher may be used with an unordered vector of indexes, thus we use a vector and not a set
This commit is contained in:
parent
0ec2cb51b0
commit
99d1a08e7c
2 changed files with 14 additions and 15 deletions
|
|
@ -29,7 +29,6 @@ Authors:
|
||||||
#define _edoRepairerDispatcher_h
|
#define _edoRepairerDispatcher_h
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "edoRepairer.h"
|
#include "edoRepairer.h"
|
||||||
|
|
@ -52,28 +51,28 @@ template < typename EOT >
|
||||||
class edoRepairerDispatcher
|
class edoRepairerDispatcher
|
||||||
: public edoRepairer<EOT>,
|
: public edoRepairer<EOT>,
|
||||||
std::vector<
|
std::vector<
|
||||||
std::pair< std::set< unsigned int >, edoRepairer< EOT >* >
|
std::pair< std::vector< unsigned int >, edoRepairer< EOT >* >
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Empty constructor
|
//! Empty constructor
|
||||||
edoRepairerDispatcher() :
|
edoRepairerDispatcher() :
|
||||||
std::vector<
|
std::vector<
|
||||||
std::pair< std::set< unsigned int >, edoRepairer< EOT >* >
|
std::pair< std::vector< unsigned int >, edoRepairer< EOT >* >
|
||||||
>()
|
>()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
//! Constructor with a single index set and repairer operator
|
//! Constructor with a single index set and repairer operator
|
||||||
edoRepairerDispatcher( std::set<unsigned int> idx, edoRepairer<EOT>* op ) :
|
edoRepairerDispatcher( std::vector<unsigned int> idx, edoRepairer<EOT>* op ) :
|
||||||
std::vector<
|
std::vector<
|
||||||
std::pair< std::set< unsigned int >, edoRepairer< EOT >* >
|
std::pair< std::vector< unsigned int >, edoRepairer< EOT >* >
|
||||||
>()
|
>()
|
||||||
{
|
{
|
||||||
this->add( idx, op );
|
this->add( idx, op );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Add more indexes set and their corresponding repairer operator address to the list
|
//! Add more indexes set and their corresponding repairer operator address to the list
|
||||||
void add( std::set<unsigned int> idx, edoRepairer<EOT>* op )
|
void add( std::vector<unsigned int> idx, edoRepairer<EOT>* op )
|
||||||
{
|
{
|
||||||
assert( idx.size() > 0 );
|
assert( idx.size() > 0 );
|
||||||
assert( op != NULL );
|
assert( op != NULL );
|
||||||
|
|
@ -90,7 +89,7 @@ public:
|
||||||
EOT partsol;
|
EOT partsol;
|
||||||
|
|
||||||
// j is an iterator that points on an uint
|
// j is an iterator that points on an uint
|
||||||
for( std::set< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) {
|
for( std::vector< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) {
|
||||||
partsol.push_back( sol.at(*j) );
|
partsol.push_back( sol.at(*j) );
|
||||||
} // for j
|
} // for j
|
||||||
|
|
||||||
|
|
@ -101,9 +100,9 @@ public:
|
||||||
(*(ipair->second))( partsol );
|
(*(ipair->second))( partsol );
|
||||||
|
|
||||||
{ // copy back the repaired partial solution to sol
|
{ // copy back the repaired partial solution to sol
|
||||||
// browse partsol with uint k, and the idx set with an iterator (std::set is an associative tab)
|
// browse partsol with uint k, and the idx set with an iterator (std::vector is an associative tab)
|
||||||
unsigned int k=0;
|
unsigned int k=0;
|
||||||
for( std::set< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) {
|
for( std::vector< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) {
|
||||||
sol[ *j ] = partsol[ k ];
|
sol[ *j ] = partsol[ k ];
|
||||||
k++;
|
k++;
|
||||||
} // for j
|
} // for j
|
||||||
|
|
|
||||||
|
|
@ -43,13 +43,13 @@ int main(void)
|
||||||
edoRepairer<EOT>* rep1 = new edoRepairerFloor<EOT>();
|
edoRepairer<EOT>* rep1 = new edoRepairerFloor<EOT>();
|
||||||
edoRepairer<EOT>* rep2 = new edoRepairerCeil<EOT>();
|
edoRepairer<EOT>* rep2 = new edoRepairerCeil<EOT>();
|
||||||
|
|
||||||
std::set<unsigned int> indexes1;
|
std::vector<unsigned int> indexes1;
|
||||||
indexes1.insert(0);
|
indexes1.push_back(0);
|
||||||
indexes1.insert(2);
|
indexes1.push_back(2);
|
||||||
|
|
||||||
std::set<unsigned int> indexes2;
|
std::vector<unsigned int> indexes2;
|
||||||
indexes2.insert(1);
|
indexes2.push_back(1);
|
||||||
indexes2.insert(3);
|
indexes2.push_back(3);
|
||||||
|
|
||||||
edoRepairerDispatcher<EOT> repare( indexes1, rep1 );
|
edoRepairerDispatcher<EOT> repare( indexes1, rep1 );
|
||||||
repare.add( indexes2, rep2 );
|
repare.add( indexes2, rep2 );
|
||||||
|
|
|
||||||
Reference in a new issue