您将获得两个数组以确定它们是否相等?
解决它的一种方法是使用哈希表。如何使用哈希表完成此操作?
答案 0 :(得分:4)
使用std::array
:
std::array<int, 3> var = {{ 1, 2, 3 }},
bar = {{ 4, 5, 6 }};
baz = {{ 1, 2, 3 }};
std::cout << std::boolalpha << (var == baz) // true
<< (bar == baz); // false
答案 1 :(得分:2)
这样的事情会在O(n)中完成。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <random>
#include <unordered_map>
using namespace std;
bool equal( const vector<int> &v1, const vector<int> &v2 )
{
if ( v1.size() != v2.size() )
return false;
unordered_map <int,int> map1, map2;
for ( auto it = v1.begin(); it != v1.end(); ++it )
map1[*it]++;
for ( auto it = v2.begin(); it != v2.end(); ++it )
map2[*it]++;
if ( map1 != map2 )
return false;
return true;
}
int main()
{
// create first array
vector<int> v1(10);
generate_n(v1.begin(), v1.size(), rand);
// create second array
vector<int> v2 (v1);
std::random_shuffle(v2.begin(),v2.end());
// print arrays
copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, "\t")); cout << endl;
copy(v2.begin(), v2.end(), ostream_iterator<int>(cout, "\t")); cout << endl;
cout << (equal(v1,v2) ? "equal" : "not equal") << endl;
return 0;
}
答案 2 :(得分:1)
由于您标记了此C ++,因此您可以直接使用operator ==
上的重载std::array
。
答案 3 :(得分:0)
如果它只是算法,并且您想使用类似哈希表的内容,请按照以下步骤操作:
浏览第一个表(循环for)并递增哈希表的字段,该字段的索引等于测试字符:for (int i=0; i<tab1.size; i++) hashtab[tab1[i]]++;
浏览第二个表(循环)并递减哈希表的字段,该索引等于测试字符。for (int i=0; i<tab2.size; i++) hashtab[tab2[i]]--;
最后浏览你的哈希表(循环)。如果其任何字段与0不同,则表不包含相同的元素。否则,表格包含相同的元素。
如果到达表的末尾而没有返回false,那么它全部为零。 例如,这可用于查看两个单词是否由相同的字母组成(完全相同的字母,每个单词的编号相同)。