gpt4 book ai didi

c++ - 哈希表和二维 vector

转载 作者:行者123 更新时间:2023-11-28 08:24:17 30 4
gpt4 key购买 nike

我想将一个 2d vector 逐行插入哈希表,然后在哈希表中搜索一行( vector )并希望能够找到它。我想做类似的事情

#include <iostream>
#include <set>
#include <vector>
using namespace std;

int main(){

std::set < vector<int> > myset;

vector< vector<int> > v;

int k = 0;

for ( int i = 0; i < 5; i++ ) {
v.push_back ( vector<int>() );

for ( int j = 0; j < 5; j++ )
v[i].push_back ( k++ );
}

for ( int i = 0; i < 5; i++ ) {
std::copy(v[i].begin(),v[i].end(),std::inserter(myset)); // This is not correct but what is the right way ?

// and also here, I want to search for a particular vector if it exists in the table. for ex. myset.find(v[2].begin(),v[2].end()); i.e if this vector exists in the hash table ?

}

return 0;
}

我不确定如何在集合中插入和查找 vector 。因此,如果有人可以指导我,那将会有所帮助。谢谢

更新:

当我意识到 std::set 不是哈希表时,我决定使用 unordered_map 但我应该如何在其中插入和查找元素:

#include <iostream>
#include <tr1/unordered_set>
#include <iterator>
#include <vector>
using namespace std;

typedef std::tr1::unordered_set < vector<int> > myset;

int main(){
myset c1;
vector< vector<int> > v;

int k = 0;

for ( int i = 0; i < 5; i++ ) {
v.push_back ( vector<int>() );

for ( int j = 0; j < 5; j++ )
v[i].push_back ( k++ );
}

for ( int i = 0; i < 5; i++ )
c1.insert(v[i].begin(),v[i].end()); // what is the right way? I want to insert vector by vector. Can I use back_inserter in some way to do this?

// how to find the vectors back?

return 0;
}

最佳答案

插入使用 std::set::insert, ala

myset.insert(v.begin(), v.end());

对于查找,使用 std::set::find ala

std::set < vector<int> >::iterator it = myset.find(v[1]);

工作示例:

#include <iostream>
#include <set>
#include <vector>
using namespace std;

int main()
{
typedef vector<int> int_v_t;
typedef set<int_v_t> set_t;

set_t myset;

// this creates 5 items
typedef vector<int_v_t> vec_t;
vec_t v(5);

int k = 0;

for(vec_t::iterator it(v.begin()), end(v.end()); it != end; ++it)
{
for (int j = 0; j < 5; j++)
it->push_back(k++);
}

// this inserts an entry per vector into the set
myset.insert(v.begin(), v.end());

// find a specific vector
set_t::iterator it = myset.find(v[1]);

if (it != myset.end()) cout << "found!" << endl;

return 0;
}

关于c++ - 哈希表和二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596658/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com