У меня есть список, состоящий из идентификаторов марок автомобилей и связанных моделей автомобилей, например:
1 Corolla
1 Yaris
1 Matrix
2 Cherokee
2 Liberty
3 CR-V
3 CR-Z
3 Элемент
3 Civic
3 Pilot
, где 1 = Toyota, 2 = Jeep и 3 = Honda.Обратите внимание, что количество моделей автомобилей для разных марок автомобилей различается.
Я хотел бы получить случайные модели автомобилей для каждой марки автомобиля.Количество автомобилей, подлежащих извлечению по марке автомобиля, зависит от общего количества связанных моделей и входного параметра с плавающей запятой: «nPercentage».(Параметр nPercentage одинаков для всех марок автомобилей).Например, если nPercentage = 0,5, возможный случайный вывод будет:
1 Corolla
1 Matrix
2 Liberty
3 CR-Z
3 Civic
3 Pilot
В настоящее время я работаю с мультикартным классом, поскольку ключи могут быть продублированы.Пока что я могу найти недублированные ключи и посчитать количество связанных элементов.Может ли кто-нибудь пролить свет на то, как найти случайные модели автомобилей по марке автомобиля?Ниже код, который у меня есть.
//The variable 'm_mapDatasetMapping' is of type: multimap<int, string>
multimap< int, string >::size_type countPerKey;
const int *pLastKey = NULL;
multimap<int,string>::const_iterator it=m_mapDatasetMapping.begin();
// looking for non-duplicated keys.
for( ; it!=m_mapDatasetMapping.end(); it++){
if( (pLastKey!=NULL) && (*pLastKey==it->first) ){
continue;
}
pLastKey = &(it->first);
// count the number of values associated to the given key.
countPerKey = m_mapDatasetMapping.count(*pLastKey);
/* Select 'x' random elements associated with the key '*pLastKey'.
The number of random elements to be extracted
is a percentage of the total number of values per key, i.e.:
x = nPercentage * countPerKey
*/
...
}