文字列とintで構成される構造体のリストを調べようとしています。文字列は URL を構成する単なる行であり、いくつかの URL の重複があります。それらはアルファベット順に並べられているため、すべての重複が隣り合っています。int は、特定の URL のコピー数をカウントするために使用されるカウンターです。私がする必要があるのは、各 URL の 1 つのインスタンスだけを出力し、その URL の最初のインスタンスが配列内にいくつあったかを示すことです。私が理解しようとしているのは、各 URL の 1 つのインスタンスを除くすべてを削除する方法です。誰かがこれを行う手法を知っているかどうか疑問に思っていました。
プログラムのこの特定の部分について、これまでに持っているコードを次に示します。
void histogram(const int MaxPages, istream& input, ostream& output)
{
string temp;
int current = 0;
CountedLocation *dynamicArray = new CountedLocation[MaxPages];
int toBeMoved = current - 1;
getline(input, temp);
while(!input.eof())
{
temp = extractTheRequest(temp);
toBeMoved = current-1;
dynamicArray[current].locator = temp;
if(isAGet(temp))
{
temp = extractLocator(temp);
while (toBeMoved >= 0 && temp < dynamicArray[toBeMoved].locator)
{
dynamicArray[toBeMoved+1].locator = dynamicArray[toBeMoved].locator;
dynamicArray[toBeMoved+1].counter = 1;
--toBeMoved;
}
dynamicArray[toBeMoved+1].locator = temp;
dynamicArray[toBeMoved+1].counter = 1;
}
current++;
getline(input, temp);
}
for(int i=0; i < MaxPages; i++)
{
string temp = dynamicArray[i].locator;
temp = "\"" + temp + "\"";
dynamicArray[i].locator = temp;
}
//int tempMax = MaxPages;
for(int i=0; i < current; i++)
{
if(search(dynamicArray, MaxPages, dynamicArray[i].locator) == search(dynamicArray, MaxPages, dynamicArray[i+1].locator))
{
int toBeMoved = i;
dynamicArray[i+1].counter = dynamicArray[i].counter + 1;
while (toBeMoved < current-1)
{
dynamicArray[toBeMoved] = dynamicArray[toBeMoved+1];
++toBeMoved;
}
--current;
if(search(dynamicArray, MaxPages, dynamicArray[i].locator) == search(dynamicArray, MaxPages, dynamicArray[i+1].locator))
continue;
}
}
for(int i=0; i < current+1; i++)
{
cerr << dynamicArray[i].locator<< ", " << dynamicArray[i].counter << endl;
output << dynamicArray[i].locator<< ", " << dynamicArray[i].counter << endl;
}
delete [] dynamicArray;
}