1
#include <functional>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>

#include <boost/lambda/lambda.hpp>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/lexical_cast.hpp>

using namespace std;
using namespace boost::lambda;
using namespace boost::multi_index;
using boost::multi_index_container;
using boost::lexical_cast;

struct student {
    int no;
    string name;
    student(int _no, string _name) : no(_no), name(_name)  { }
};

struct no {};
struct name {};

struct change_name {
    change_name(const string& new_namex) : new_name(new_namex) {}
    void operator()(student& stu) {
        stu.name = new_name;
    }
    private:
    string new_name;
};

int main()
{
    typedef multi_index_container< 
        student,
        indexed_by<
            ordered_non_unique<tag<no>, member<student, int, &student::no>>,
            ordered_non_unique<tag<name>, member<student, string, &student::name>>
        >> student_set;

    typedef student_set::index<no>::type student_set_no;

    student_set students;
    for (int i = 0; i < 10; ++i) 
        students.insert( student(i, "love student " + lexical_cast<string>(i)) );
    student_set_no& no_index = students.get<no>();
    student_set_no::iterator iter = no_index.find(3);

    //suppose i want to change the name to "you",
    no_index.modify(iter, change_name("you"));
    //how could i do this with lambda expression ?
    no_index.modify(iter, _1.name = "you");

    cout << iter->name << endl;
    return 0;
}

関数演算子クラスを定義せずに名前を変更するにはどうすればよいですか?

ありがとう。

4

0 に答える 0