Я пишу алгоритм kmeans. Мне нужен некоторый 2d динамический контейнер для хранения групп точек. Вот некоторый код2-мерный динамический контейнер qt
void KMeans::initialPartitionPoints()
{
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
for (int i = 0; i < numberOfClusters(); i++)
{
qint64 randomValue = qrand() % _points->size();
_centroids.push_back(new Centroid(_points->at(randomValue)));
}
for (int i = 0; i < _points->size(); i++)
{
int cluster;
qreal bestDistance = std::numeric_limits<qreal>::max();
qreal distance;
for (int j = 0; j < _centroids.size(); j++)
{
distance = _distanceMeasure->calculateDistance(_centroids.at(j), _points->at(i));
if (distance < bestDistance)
{
bestDistance = distance;
cluster = j;
}
}
WHAT HERE TO STORE i POINT IN j GROUP?
}
}
_centroids
- это список точек, которые являются центрами групп
_points
- это список всех точек
Теперь, как я могу сделать что-то вроде QList< QList<Point*> > _clusters
для хранения точки в кластерах, где число столбцов указано в конструкторе, а количество элементов (строк) для каждого столбца неизвестно. Я имею в виду, как я могу инициализировать первый QList и установить количество элементов, а затем как я могу использовать второй QList как динамический (автоматический размер) контейнер (QList::append())
?
cluster
- номер группы, где _centroids[cluster]
- это та же группа, как этот _clusters[cluster][somePoint]
.