Hallo,
ik ben nieuw in C++ dus waarschijnlijk is er wel een eenvoudige oplossing voor mijn probleem die ik over het hoofd zie.
Ik heb een vector met objecten (buildings, maar dit is niet van belang) en wil hier willekeurige elementen uit verwijderen op basis van een kans. Ik itereer over de vector en genereer voor elk element een random getal en kijk of dit kleiner is dan een vast getal tussen 0 en 1 (de kans). Als de test slaagt moet het element verwijderd worden.
Momenteel probeer ik een element te verwijderen met erase-remove:
float kans=0.4;
vector<Building>::iterator buildingIt;
for(buildingIt=vector.begin(); buildingIt != vector.end(); ++buildingIt){
Building smallBuilding = *buildingIt;
float getal = (float)rand()/RAND_MAX;
if(getal<kans){ vector.erase(remove(vector.begin(),vector.end(),???),vector.end());
}
}
}
Maar ik weet niet wat ik bij ??? moet gebruiken. Mijn voorwaarde om elementen te verwijderen heeft niets met de elementen zelf te maken. Ik heb ook al aan remove_if gedacht, maar ook hier slaagt het predicaat op de waardes in de vector zelf, en dit heb ik niet nodig. Hoe kan ik dus het best de objecten uit de vector verwijderen? Zijn er eenvoudigere manieren? Moet ik misschien een ander soort container gebruiken dan vector?
bedankt!
ik ben nieuw in C++ dus waarschijnlijk is er wel een eenvoudige oplossing voor mijn probleem die ik over het hoofd zie.
Ik heb een vector met objecten (buildings, maar dit is niet van belang) en wil hier willekeurige elementen uit verwijderen op basis van een kans. Ik itereer over de vector en genereer voor elk element een random getal en kijk of dit kleiner is dan een vast getal tussen 0 en 1 (de kans). Als de test slaagt moet het element verwijderd worden.
Momenteel probeer ik een element te verwijderen met erase-remove:
float kans=0.4;
vector<Building>::iterator buildingIt;
for(buildingIt=vector.begin(); buildingIt != vector.end(); ++buildingIt){
Building smallBuilding = *buildingIt;
float getal = (float)rand()/RAND_MAX;
if(getal<kans){ vector.erase(remove(vector.begin(),vector.end(),???),vector.end());
}
}
}
Maar ik weet niet wat ik bij ??? moet gebruiken. Mijn voorwaarde om elementen te verwijderen heeft niets met de elementen zelf te maken. Ik heb ook al aan remove_if gedacht, maar ook hier slaagt het predicaat op de waardes in de vector zelf, en dit heb ik niet nodig. Hoe kan ik dus het best de objecten uit de vector verwijderen? Zijn er eenvoudigere manieren? Moet ik misschien een ander soort container gebruiken dan vector?
bedankt!
Laatst bewerkt: