Digamos que hay una lista de enteros [1,2,3,4,5] y una función de mapa que multiplica cada elemento por 10 y devuelve lista modificada como [10,20,30,40,50], sin modificar la lista original. Cómo se puede hacer esto de manera eficiente en C++.¿Cómo crear una función de mapa en C++?
Respuesta
He aquí un ejemplo:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int multiply(int);
int main() {
vector<int> source;
for(int i = 1; i <= 5; i++) {
source.push_back(i);
}
vector<int> result;
result.resize(source.size());
transform(source.begin(), source.end(), result.begin(), multiply);
for(vector<int>::iterator it = result.begin(); it != result.end(); ++it) {
cout << *it << endl;
}
}
int multiply(int value) {
return value * 10;
}
sólo publicar esto para ilustrar el uso de un funtor en transformar en lugar de una función global:
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <functional>
#include <iostream>
using namespace std;
struct MulBy : public std::unary_function<int, int>
{
MulBy(int v) : v_(v) {}
int operator()(int lhs) const
{
return lhs * v_;
}
private:
int v_;
};
int main()
{
int incoming[5] = {1, 2, 3, 4, 5};
int result[5] = {0, 0, 0, 0, 0};
transform(&incoming[0], &incoming[5], &result[0], MulBy(10));
copy(&result[0], &result[5], ostream_iterator<int>(cout, " "));
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
using namespace std;
struct MulBy : public std::unary_function<int, int>
{
MulBy(int v) : v_(v) {}
int operator()(int lhs) const
{
return lhs * v_;
}
private:
int v_;
};
int main()
{
vector<int> ListOfNumber;
ListOfNumber.push_back(1);
ListOfNumber.push_back(2);
ListOfNumber.push_back(3);
ListOfNumber.push_back(4);
ListOfNumber.push_back(5);
vector<int> ListResult;
ListResult.resize(ListOfNumber.size());
//Produces a new list
transform(ListOfNumber.begin(),ListOfNumber.end(),ListResult.begin(),MulBy(10));
copy(ListOfNumber.begin(),ListOfNumber.end(),ostream_iterator<int>(cout,"\t"));
//Modifies the original list
transform(ListOfNumber.begin(),ListOfNumber.end(),ListOfNumber.begin(),MulBy(10));
copy(ListResult.begin(),ListResult.end(),ostream_iterator<int>(cout,"\t"));
cin.get();
}
A lo largo de las líneas de @darids respuesta, pero C++ 03 (actual en el momento de la publicación original):
#include <vector>
#include <algorithm>
#include <functional>
std::vector<int> src;
std::vector<int> dst;
std::transform(src.begin(), src.end(),
std::back_inserter(dst),
std::bind1st(std::multiplies<int>(), 10));
Gracias por esta respuesta. Sugiero agregar las directivas include necesarias para mayor claridad. – buttonupbub
C++ actual sería utilizar una lambda en lugar de bind1st. – sv90
@ sv90 seguro, el tiempo y C++ se han movido desde que publiqué esta respuesta. – msandiford
- 1. función de mapa en Erlang
- 2. android: cómo crear una función reutilizable
- 3. ¿Hay una función de "mapa" en php?
- 4. Uso de la función de mapa con una función multivariada
- 5. ¿Cómo crear una clave dinámica de mapa en javascript?
- 6. En Clojure, ¿cómo podría crear una función "agregar ID al mapa"?
- 7. Java: ¿hay una función de mapa?
- 8. Crear mapa de contorno
- 9. rareza en función de mapa clojure
- 10. Función de mapa en MATLAB?
- 11. UNIX función de mapa
- 12. Cómo crear un mapa ordenado en scala?
- 13. ¿Cómo crear una GUI dentro de una función en MATLAB?
- 14. Comprender la función de mapa
- 15. ¿Cómo crear una función haskell polyvariadic?
- 16. Coffeescript --- ¿Cómo crear una función anónima autoiniciativa?
- 17. ¿Cómo crear una función MySQL personalizada?
- 18. Cómo crear una función temporal en Emacs Lisp
- 19. atajo para crear un mapa de una lista en groovy?
- 20. ¿Cómo crear el mapa <cadena, clase :: método> en C++ y poder buscar la función y llamarla?
- 21. Clojure: Cómo crear una función en tiempo de ejecución
- 22. ¿Cómo crear una función de embalaje optimizada en python?
- 23. ¿Cómo crear una función propia de jQuery en JavaScript?
- 24. Cómo crear mejor una función de temporizador en R
- 25. ¿Cómo crear dinámicamente una clase en C#?
- 26. Cómo crear una ventana oculta en C++
- 27. ¿Cómo crear una función de plantilla dentro de una clase? (C++)
- 28. Eliminar una clave de un mapa C++
- 29. ¿Cómo podría crear una lista en C++?
- 30. ¿Cómo crear una subclase en C#?
¿Es esta tarea? –
Lo siento ... He usado transform y for_each, no pude recordarlo en este momento, estaba buscando el cuarto parámetro en for_each pensando que como transform :( – yesraaj