sparse_array.h

Go to the documentation of this file.
00001 
00012 #ifndef SPARSE_ARRAY_H
00013 #define SPARSE_ARRAY_H
00014 
00015 template <typename I, typename T> class sparse_array {
00016 public:
00017     typedef std::map<I, T> container_type;
00018     typedef typename container_type::size_type size_type;
00019 
00028     T operator[](size_type index) const {
00029         typename container_type::const_iterator it = container.find(index);
00030         if (it != container.end())
00031             return it->second;
00032         else
00033             return 0;
00034     }
00035 
00036 
00041     T & operator[](size_type index) {
00042         return container[index];
00043     }
00044 
00045 
00049     sparse_array & operator+=(sparse_array const & rhs) {
00050         typename container_type::const_iterator it = rhs.container.begin();
00051         typename container_type::const_iterator it_end = rhs.container.end();
00052         for ( ; it != it_end; it++)
00053             container[it->first] += it->second;
00054 
00055         return *this;
00056     }
00057 
00058 
00063     sparse_array & operator-=(sparse_array const & rhs) {
00064         typename container_type::const_iterator it = rhs.container.begin();
00065         typename container_type::const_iterator it_end = rhs.container.end();
00066         for ( ; it != it_end; it++)
00067             container[it->first] -= it->second;
00068 
00069         return *this;
00070     }
00071 
00072 
00077     size_type size() const {
00078         if (container.size() == 0)
00079             return 0;
00080         typename container_type::const_iterator last = container.end();
00081         --last;
00082         return last->first + 1;
00083     }
00084 
00085 
00087     bool zero() const {
00088         typename container_type::const_iterator it = container.begin();
00089         typename container_type::const_iterator it_end = container.end();
00090         for ( ; it != it_end; it++)
00091             if (it->second != 0)
00092                 return false;
00093         return true;
00094     }
00095 
00096 private:
00097     container_type container;
00098 };
00099 
00100 #endif // SPARSE_ARRAY_H

Generated on 8 Nov 2012 for Oprofile by  doxygen 1.6.1