Witam wszystkich,
Mam taki problem: program, który przytaczam w całości, generuje kombinacje stringów(po sześć w jednej linii, razem 210 takich sześcioelementowych podzbiorów). Pierwotnie, bez tego o co mi chodzi, wygląda to tak:
ia11, ia34, ia72, ia167, ia190, ia21
ia167,ia21,ia72, ia102,ia180,ia178
...i tak dalej 210 razy
...teraz chciałbym te stringi wypełnić liczbami z wektorów, które są im przyporządkowane tak aby wyglądało to tak:
ia11, ia34, ia72, ia167, ia190, ia21
3,9,17,21,24,31,33,36,42,49, 4,8,19,22,28,30,34,39,43,47,2,6,10,13,14,25,29,37,38,46
1,6,12,15,22,27,31,32,41,42,4,7,14,17,23,30,33,36,45,48 ,2,9,13,18,21,26,34,39,44,49
3,8,11,18,22,25,36,37,43,46 ,1,6,16,17,23,28,35,40,41,44 ,2,5,12,19,24,27,31,34,42,49
3,4,12,15,21,28,32,39,47,48 ,6,9,16,17,29,30,31,38,41,42,7,8,11,20,26,27,34,35,45,46
3,10,11,14,22,23,32,35,43,44 ,6,9,16,19,24,29,37,38,45,48,2,5,13,18,25,30,31,40,41,0
2,5,16,19,25,30,34,39,45,48,1,9,12,13,21,24,33,36,44,49,3,8,15,20,23,26,35,40,43,46
ia167,ia21,ia72, ia102,ia180,ia178
...liczby...
...liczby...
…etc.
… i tak dalej dla każdej szóstki stringów.
Wiem, że potrzebne jest porównanie wszystkich stringów z sześcioelementowych kombinacji z kluczami z mapy i ponadto należy użyć funkcji ‘equal’, ale program się nie kompiluje. Wyświetla też błąd, który cytuję w komentarzu. Jeżeli ktoś byłby chętny dokładniej spojrzeć na kod, to mogę przesłać również pliki nagłówkowe.
Pozdrawiam!
#include "IndexCombination.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>
#include <sstream>
using namespace std;
using namespace stdcomb;
template<class InputIterator1, class InputIterator2>
bool equal(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2
);
template<class InputIterator1, class InputIterator2, class BinaryPredicate>
bool equal(
InputIterator1 _First1,
InputIterator1 _Last1,
InputIterator2 _First2,
BinaryPredicate _Comp
);
bool equal ( const string elem1, const string elem2 )
{
return elem1 == elem2;
}
template <class K, class V>
class key_equals {
private:
K key;
public:
// constructor (initialize key to compare with)
key_equals (const K& k)
: key(k) {
}
// comparison
bool operator() (pair<const K, V> elem)
{
return elem.first == key; // sortowanie wedlug klucza
}
};
int main(int argc, char* argv[])
{
int ia11[30] = {3,9,17,21,24,31,33,36,42,49,
4,8,19,22,28,30,34,39,43,47,
2,6,10,13,14,25,29,37,38,46};
int ia34[30] ={1,6,12,15,22,27,31,32,41,42
,4,7,14,17,23,30,33,36,45,48
,2,9,13,18,21,26,34,39,44,49};
int ia72[30] = {3,8,11,18,22,25,36,37,43,46
,1,6,16,17,23,28,35,40,41,44
,2,5,12,19,24,27,31,34,42,49};
int ia167[30] ={3,4,12,15,21,28,32,39,47,48
,6,9,16,17,29,30,31,38,41,42
,7,8,11,20,26,27,34,35,45,46};
int ia190[30] = {3,10,11,14,22,23,32,35,43,44
,6,9,16,19,24,29,37,38,45,48
,2,5,13,18,25,30,31,40,41,0};
int ia21[30] ={ 2,5,16,19,25,30,34,39,45,48,
1,9,12,13,21,24,33,36,44,49,
3,8,15,20,23,26,35,40,43,46};
int ia64[30] ={6,9,13,20,28,29,33,40,43,48
,2,7,16,19,24,27,31,34,44,47
,5,8,14,17,21,30,32,37,41,46};
int ia102[30] ={4,9,14,19,22,29,35,38,46,47
,5,8,13,16,21,26,33,40,41,48
,6,7,15,17,28,30,32,39,42,45};
int ia178[30] ={6,9,15,20,23,24,37,38,42,45
,7,8,16,19,22,25,34,39,43,46
,1,2,17,18,26,29,31,40,47,0};
int ia180[30] ={1,4,13,18,27,30,33,38,45,46
,2,3,12,15,22,23,39,40,44,47
,8,9,11,17,24,25,32,37,49,0};
vector<int>via11(ia11,ia11+30); //69
vector<int>via34(ia34,ia34+30);
vector<int>via72(ia72,ia72+30);
vector<int>via167(ia167,ia167+30);
vector<int>via190(ia190,ia190+30);
vector<int>via21(ia21,ia21+30);
vector<int>via64(ia64,ia64+30);
vector<int>via102(ia102,ia102+30);
vector<int>via178(ia178,ia178+30);
vector<int>via180(ia180,ia180+30);
CIdxComb cb;
cb.SetSizes(10,6);
vector<string> vsia;
vsia.push_back( "ia11" );
vsia.push_back( "ia34" );
vsia.push_back( "ia72" );
vsia.push_back( "ia167" );
vsia.push_back( "ia190" );
vsia.push_back( "ia21" );
vsia.push_back( "ia64" );
vsia.push_back( "ia102" );
vsia.push_back( "ia178" );
vsia.push_back( "ia180" );
vector<unsigned int> vi(6);
vi[0] = 0;
vi[1] = 1;
vi[2] = 2;
vi[3] = 3;
vi[4] = 4;
vi[5] = 5;
cout<< vsia[ vi[0] ] << " "
<< vsia[ vi[1] ] << " "
<< vsia[ vi[2] ] << " "
<< vsia[ vi[3] ] << " "
<< vsia[ vi[4] ] << " "
<< vsia[ vi[5] ] << "\n";
int Total = 1;
while ( cb.GetNextComb( vi ) )
{
{
typedef map<string,vector<int> >container;
container::iterator Iter1;
container map;
map.insert(make_pair("ia11", via11));
map.insert(make_pair("ia34", via34));
map.insert(make_pair("ia72", via72));
map.insert(make_pair("ia167", via167));
map.insert(make_pair("ia190", via190));
map.insert(make_pair("ia21", via21));
map.insert(make_pair("ia64", via64));
map.insert(make_pair("ia102", via102));
map.insert(make_pair("ia178", via178));
map.insert(make_pair("ia180", via180));
int get();
string String2(ostream& get);
ostream& get (streambuf& sb);
bool b;
b = equal(map.begin(),map.end(),String2.begin());//tu komunikat: request for member 'begin'
if(b) //in 'String2',which is of non-class type
std::copy(Iter1->second.begin(),Iter1->second.end(),//'std::string()(std::ostream&)'
std::ostream_iterator<int>(std::cout,","));
std::cout<<std::endl;
}
cout<< vsia[ vi[0] ] << " "
<< vsia[ vi[1] ] << " "
<< vsia[ vi[2] ] << " "
<< vsia[ vi[3] ] << " "
<< vsia[ vi[4] ] << " "
<< vsia[ vi[5] ] << endl;
++Total;
}
cout<< "\nTotal : " << Total << endl;
system( "pause" );
return 0;
}