|
Boost Users : |
Subject: Re: [Boost-users] for_each on boost::ptr_map
From: Peter Barker (newbarker_at_[hidden])
Date: 2008-09-16 10:00:54
On Mon, Sep 15, 2008 at 9:20 PM, Robert Dailey <rcdailey_at_[hidden]> wrote:
> Hi,
>
> Is there a way I can use std::for_each() on a boost::ptr_map and have the
> functor object be given the *value* of each item iterated instead of a
> key/value pair like it does with std::map? Help is appreciated, thank you.
std::for_each() with std::map receives the pair so you need something
like the following to extract the value:
#include <algorithm>
#include <iostream>
#include <map>
#include <string>
#include <boost/bind.hpp>
class MyClass
{
public:
MyClass(int x) : x_(x) {}
int getX() const {return x_;}
private:
int x_;
};
void func(MyClass* mc)
{
std::cout << mc->getX() << std::endl;
}
int main()
{
typedef std::map<std::string,MyClass*> MapType;
MapType myPtrMap;
std::string key1 = "Key1";
std::string key2 = "Key2";
myPtrMap.insert(std::make_pair(key1,new MyClass(1)));
myPtrMap.insert(std::make_pair(key2,new MyClass(2)));
std::for_each(myPtrMap.begin(),myPtrMap.end(),boost::bind(&func,boost::bind(&MapType::value_type::second,_1)));
}
Here's the same code working with ptr_map:
#include <algorithm>
#include <iostream>
#include <string>
#include <boost/bind.hpp>
#include <boost/ptr_container/ptr_map.hpp>
class MyClass
{
public:
MyClass(int x) : x_(x) {}
int getX() const {return x_;}
private:
int x_;
};
void func(MyClass* mc)
{
std::cout << mc->getX() << std::endl;
}
int main()
{
typedef boost::ptr_map<std::string,MyClass> MapType;
MapType myPtrMap;
std::string key1 = "Key1";
std::string key2 = "Key2";
myPtrMap.insert(key1,new MyClass(1));
myPtrMap.insert(key2,new MyClass(2));
std::for_each(myPtrMap.begin(),myPtrMap.end(),boost::bind(&func,boost::bind(&MapType::value_type::second,_1)));
}
I hope that helps you out.
Regards,
Pete
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net