【发布时间】:2018-04-19 01:50:43
【问题描述】:
我是 C++ 新手,我正在尝试将两个未排序的向量元素相互比较并确定它们是否匹配。
例如: 1 4 9 16 9 7 4 9 11 和 11 11 7 9 16 4 1 这些将被视为匹配。
我尝试过使用 firstVector == secondVector,但是当它们的向量未排序时不起作用,我特别想在它们未排序但正在苦苦挣扎时比较它们。
int main() {
int incorrectMatches = 0;
int totalMatches = 0;
int input = 0;
vector <int> firstVector;
vector <int> secondVector;
do {
cout << "Please enter a number for first vector: ";
cin >> input;
firstVector.push_back(input);
cout << endl;
}
while (input > 0);
input = 0;
firstVector.pop_back();
do {
cout << "Please enter a number for second vector: ";
cin >> input;
secondVector.push_back(input);
cout << endl;
}
while (input > 0);
secondVector.pop_back();
for (int loop = 0; loop < firstVector.size(); loop++) {
cout << firstVector[loop] << " ";
}
cout << endl;
for (int loop = 0; loop < secondVector.size(); loop++) {
cout << secondVector[loop] << " ";
}
cout << endl;
int vectorSize = firstVector.size();
for (int i = 0; i < vectorSize; i++) {
if (firstVector[i] == secondVector[i]) {
totalMatches = totalMatches++;
}
else {
incorrectMatches = incorrectMatches++;
}
}
cout << "There were " << totalMatches << " matches." << endl;
cout << "There were " << incorrectMatches << " incorrect matches";
/*
if (firstVector == secondVector) {
cout << "Your vectors match!";
}
else{
cout << "Your vectors don't match!";
}
*/
/*
for (int i = 0; i < input; i++) {
cout << "Please enter a number (1-9): ";
myVector.push_back(input);
cout << endl;
myVector[i] = i;
cout << "Vector entry: " << myVector[i] << endl;
}
*/
system("pause");
return 0;}
【问题讨论】:
-
用
std::sort对两者进行排序,然后将它们与==进行比较怎么样?它与大多数其他策略一样有效(常见的例外是使用std::unordered_map<int, unsigned int>来计算频率)并且非常易于阅读。 -
不知道如何在不排序的情况下有效地做到这一点......
-
您需要一个有效的解决方案,还是只需要一个有效的解决方案?
-
@OznOg:简单。使用地图,计算第一个向量的元素,不计算第二个向量的元素。如果地图中的计数不为 0,则向量不相等。 (您可以从那里进行一些优化,但这是基本算法。)