std::map mit zufälligen Paaren über generate_n füllen



  • Hallo,

    ich versuche eine map mit zufälligen Werten zu füllen. Dazu möchte ich generate_n folgendermaßen verwenden:

    #include <algorithm>
    #include <ctime>
    #include <iterator>
    #include <map>
    
    using namespace std;
    
    map<int, int>::value_type generatePair()
    {
    	return map<int, int>::value_type( rand(), rand() );
    }
    
    int main()
    {
    	srand( static_cast<unsigned int>(time( NULL )));
    
    	map<int, int> data;	
    	generate_n(inserter(data, data.begin()), 1000, generatePair);
    
    	return 0;
    }
    

    Dies führt jedoch zu nicht identifizierbaren Templatefehlermeldungen im Stile von
    ...undefined reference to operator delete(void*) ...undefined reference tostd::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)

    etc.

    Ich befürchte, dass der Ansatz gänzlich falsch ist.

    Kann mich jemand in die richtige Richtung lenken?

    Vielen Dank!



  • Also bei mir wird das fehlerfrei compiliert und es werden zufällige Werte erzeugt.



  • http://ideone.com/lMaM0

    läuft einwandfrei.
    daher bitte mehr details 🙂



  • Das war natürlich nen Bock von mir. Habs jetzt aber hinbekommen 🙂

    Wens interessiert hier eine Version mit Lambdaausdruck:

    #include <algorithm>
    #include <ctime>
    #include <iostream>
    #include <iterator>
    #include <map>
    
    using namespace std;
    
    int main()
    {
    	srand( static_cast<unsigned int>(time( NULL )));
    
    	map<int, int> data;	
    
    	generate_n(inserter(data, data.begin()), 1000, [] () {
    		return map<int, int>::value_type( rand(), rand() );
    	});
    
    	for_each(data.begin(), data.end(), [](pair<int, int> p) {
    		cout << p.first << "\t" << p.second << endl;
    	});
    
    	return 0;
    }
    

    Auf jeden Fall vielen Dank fürs Augenöffnen 🤡


Anmelden zum Antworten