Hello,

This did not make the cut for Rcpp 0.7.4 which was released yesterday, 
but I've made some changes to that std::map<std::string,T> can be 
wrap()'ed ... if T can. For example :


Here is a simple example from the unit tests :

        funx <- cfunction(signature(),
        '
        std::map< std::string, int > m ;
        m["b"] = 100;
        m["a"] = 200;
        m["c"] = 300;
        return wrap(m) ;
        ',
        Rcpp=TRUE, verbose=FALSE, includes = "using namespace Rcpp;" )


 > res <- funx()
 > res
   a   b   c
200 100 300
 > str( res )
  Named int [1:3] 200 100 300
  - attr(*, "names")= chr [1:3] "a" "b" "c"
        

Here is a more involved example, wrapping map<string,vector<int>> :

        funx <- cfunction(signature(),
        '
        typedef std::pair<std::string,std::vector<int> > _pair ;
        std::multimap< std::string,std::vector<int> > m ;
        std::vector<int> b ; b.push_back(1) ; b.push_back(2) ;
        m.insert( _pair("b", b) );
        
        std::vector<int> a ; a.push_back(1) ; a.push_back(2) ; a.push_back(2) ;
        m.insert( _pair("a", a) );
        
        std::vector<int> c ; c.push_back(1) ; c.push_back(2) ; 
c.push_back(2) ; c.push_back(2) ;
        m.insert( _pair("c",  c) );
        return wrap(m) ;
        ',
        Rcpp=TRUE, verbose=FALSE, includes = "using namespace Rcpp;" )

 > res <- funx()
 > str( res )
List of 3
  $ a: int [1:3] 1 2 2
  $ b: int [1:2] 1 2
  $ c: int [1:4] 1 2 2 2

Have fun !

Romain

-- 
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/KfKn : Rcpp 0.7.2
|- http://tr.im/JOlc : External pointers with Rcpp
`- http://tr.im/JFqa : R Journal, Volume 1/2, December 2009


_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to