954,504 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

hash map in STL

hi guys, im trying to do map in cpp using STL and when i ran a simple program it was showing error that:
error:
nomatchfor'operator<<'in'std::cout<<(&mp0_iter)->std::_Rb_tree_iterator<_Tp>::operator* [with _Tp = std::pair]()'....
my program was like this:

#include<map.h>
#include<iostream.h>

int main()
{
        map<int,int>::iterator mp0_iter;
        map<int,int>mp0;
        map<int,int>mp1;

        mp1.insert(1,13);
        mp1.insert(2,16);
        mp1.insert(3,17);

        for(mp0_iter=mp1.begin();mp0_iter!=mp1.end();mp0_iter++)
                {
                        cout<<*mp0_iter<<' ';
                }
        cout<<endl;

        return(0);
}
karthik.c
Light Poster
48 posts since Feb 2009
Reputation Points: 16
Solved Threads: 0
 

The map as a whole can not displayed using cout. Try
cout << *mp0_iter.first() << *mp0_iter.second() << '\n';

kbshibukumar
Junior Poster in Training
65 posts since Jan 2009
Reputation Points: 12
Solved Threads: 8
 

>cout << *mp0_iter.first() << *mp0_iter.second() << '\n';
This won't work, for several reasons. To begin with, first and second are not member functions. Also, the member operator binds more tightly than the indirection operator, so you're trying to call the first and second member functions (which still don't exist) on the iterator itself rather than the value type. You need to wrap the indirection in parens:

cout << (*mp0_iter).first << (*mp0_iter).second << '\n';

In sufficiently conforming versions of the standard library, the -> operator is defined and you can use that instead:

cout << mp0_iter->first << mp0_iter->second << '\n';

>mp1.insert(1,13);
>mp1.insert(2,16);
>mp1.insert(3,17);
The map class doesn't have an overload of the insert member function that takes a key/value pair as two arguments. You'd have to create your own pair object first:

mp1.insert ( make_pair ( 1, 13 ) );
mp1.insert ( make_pair ( 2, 16 ) );
mp1.insert ( make_pair ( 3, 17 ) );

But that's effort you can avoid by taking advantage of the subscript operator overload:

mp1[1] = 13;
mp1[2] = 16;
mp1[3] = 17;
Narue
Bad Cop
Administrator
15,460 posts since Sep 2004
Reputation Points: 6,464
Solved Threads: 1,401
 

thanks narue ,i tried out both ways of inserting:using pair object and operator overload and program is working fine.

karthik.c
Light Poster
48 posts since Feb 2009
Reputation Points: 16
Solved Threads: 0
 

hi again,im having some problem while coding with hash_map
my coding was like this:

#include<iostream>
#include<hash_map>
using namespace std;

int main()
{
        typedef pair<int,int>make_pair;
        hash_map<int,int>::iterator hmp0_iter;

        hash_map<int,int>hmp0;

        hmp0.insert(make_pair(1,78));
        hmp0.insert(make_pair(3,34));

        for(hmp0_iter=hmp0.begin();hmp0_iter!=hmp0.end();hmp0_iter++)
        {
                cout<<(*hmp0_iter).second<<' ';
        }
        cout<<endl;

        return(0);
}

error was like this:
hashdemo.cpp:2:19: hash_map: No such file or directory
hashdemo.cpp: In function `int main()':
hashdemo.cpp:8: error: `hash_map' was not declared in this scope
hashdemo.cpp:8: error: expected primary-expression before "int"
hashdemo.cpp:8: error: expected `;' before "int"
hashdemo.cpp:10: error: expected primary-expression before "int"
hashdemo.cpp:10: error: expected `;' before "int"
hashdemo.cpp:12: error: `hmp0' was not declared in this scope
hashdemo.cpp:15: error: `hmp0_iter' was not declared in this scope

but when i replaced #includewith #includethe program ran and printed the output but it did showed some warnings saying im using deprecated header.

im workin in linux using gcc(version3.4.6)so does it support hashmap??

karthik.c
Light Poster
48 posts since Feb 2009
Reputation Points: 16
Solved Threads: 0
 

I don't know if there is any stl hash_map. U need to use just map instead, with a #include map::iterator hmp0_iter;
maphmp0;

kbshibukumar
Junior Poster in Training
65 posts since Jan 2009
Reputation Points: 12
Solved Threads: 8
 

hi shibukumar, i actually was trying to program the code which was given in a site where they are using hash_map at the same time they are also saying hashtable Datastructure is not part of c++ standard library.

http://www.tenouk.com/Module29a.html
so what if their is any way to do it??

karthik.c
Light Poster
48 posts since Feb 2009
Reputation Points: 16
Solved Threads: 0
 

hi again,im having some problem while coding with hash_map my coding was like this:

#include<iostream>
#include<hash_map>
using namespace std;

int main()
{
        typedef pair<int,int>make_pair;
        hash_map<int,int>::iterator hmp0_iter;

        hash_map<int,int>hmp0;

        hmp0.insert(make_pair(1,78));
        hmp0.insert(make_pair(3,34));

        for(hmp0_iter=hmp0.begin();hmp0_iter!=hmp0.end();hmp0_iter++)
        {
                cout<<(*hmp0_iter).second<<' ';
        }
        cout<<endl;

        return(0);
}

error was like this: hashdemo.cpp:2:19: hash_map: No such file or directory hashdemo.cpp: In function `int main()': hashdemo.cpp:8: error: `hash_map' was not declared in this scope hashdemo.cpp:8: error: expected primary-expression before "int" hashdemo.cpp:8: error: expected `;' before "int" hashdemo.cpp:10: error: expected primary-expression before "int" hashdemo.cpp:10: error: expected `;' before "int" hashdemo.cpp:12: error: `hmp0' was not declared in this scope hashdemo.cpp:15: error: `hmp0_iter' was not declared in this scope

but when i replaced #includewith #includethe program ran and printed the output but it did showed some warnings saying im using deprecated header.

im workin in linux using gcc(version3.4.6)so does it support hashmap??

Hash_map signature is wrong refer
5 parameter need to be passed

ambi_
Newbie Poster
1 post since Jan 2010
Reputation Points: 10
Solved Threads: 0
 

The namespaceof hash_map is not std. Check the include file .

hi again,im having some problem while coding with hash_map my coding was like this:

#include<iostream>
#include<hash_map>
using namespace std;

int main()
{
        typedef pair<int,int>make_pair;
        hash_map<int,int>::iterator hmp0_iter;

        hash_map<int,int>hmp0;

        hmp0.insert(make_pair(1,78));
        hmp0.insert(make_pair(3,34));

        for(hmp0_iter=hmp0.begin();hmp0_iter!=hmp0.end();hmp0_iter++)
        {
                cout<<(*hmp0_iter).second<<' ';
        }
        cout<<endl;

        return(0);
}

error was like this: hashdemo.cpp:2:19: hash_map: No such file or directory hashdemo.cpp: In function `int main()': hashdemo.cpp:8: error: `hash_map' was not declared in this scope hashdemo.cpp:8: error: expected primary-expression before "int" hashdemo.cpp:8: error: expected `;' before "int" hashdemo.cpp:10: error: expected primary-expression before "int" hashdemo.cpp:10: error: expected `;' before "int" hashdemo.cpp:12: error: `hmp0' was not declared in this scope hashdemo.cpp:15: error: `hmp0_iter' was not declared in this scope

but when i replaced #includewith #includethe program ran and printed the output but it did showed some warnings saying im using deprecated header.

im workin in linux using gcc(version3.4.6)so does it support hashmap??

alvinyang
Newbie Poster
1 post since Apr 2010
Reputation Points: 10
Solved Threads: 0
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You