COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/athos/lp/lin_expr.h @ 1253:609fe893df8c

Last change on this file since 1253:609fe893df8c was 1253:609fe893df8c, checked in by Alpar Juttner, 15 years ago
  • simple makefile added
  • _FixId class added (more clarification needed)
  • LinExpr? class added
  • some higher level interfaces added to LpSolverBase?
  • minor corrections
File size: 1.8 KB
Line 
1/* -*- C++ -*-
2 * src/lemon/lin_expr.h - Part of LEMON, a generic C++ optimization library
3 *
4 * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
5 * (Egervary Combinatorial Optimization Research Group, EGRES).
6 *
7 * Permission to use, modify and distribute this software is granted
8 * provided that this copyright notice appears in all copies. For
9 * precise terms see the accompanying LICENSE file.
10 *
11 * This software is provided "AS IS" with no warranty of any kind,
12 * express or implied, and with no claim as to its suitability for any
13 * purpose.
14 *
15 */
16
17#ifndef LEMON_LIN_EXPR_H
18#define LEMON_LIN_EXPR_H
19
20#include<vector>
21
22
23#include<map>
24
25///\file
26///\brief Classes to handle linear expressions
27namespace lemon {
28 
29  /// Class to handle sparse linear expressions
30  template <class _V,class _C>
31  class SparseLinExpr : public std::map<_V, _C>
32  {
33  public:
34    typedef _V Var;
35    typedef _C Coeff;
36   
37  protected:
38    typedef typename std::map<_V, _C> Base;
39
40    Coeff const_comp;
41  public:
42    SparseLinExpr() { }
43    SparseLinExpr(const Var &v) : const_comp(v) {
44      Base::insert(std::make_pair(v, 1));
45    }
46    SparseLinExpr(const Coeff &v) : const_comp(v) {}
47   
48    void set(const Var &v,const Coeff &c) {
49      return Base::insert(std::make_pair(v, c));
50    }
51//     Coeff &operator[](const Var &v) { return data[v]; }
52//     const Coeff &operator[](const Var &v) const { return data[v]; }
53
54    Coeff &constComp() { return const_comp; }
55    const Coeff &constComp() const { return const_comp; }
56
57    ///Removes the components with zero coefficient.
58    void simplify() {
59      for (typename Base::iterator i=Base::begin(); i!=Base::end();) {
60        typename Base::iterator j=i;
61        ++j;
62        if ((*i).second==0) Base::erase(i);
63        j=i;
64      }
65    }
66   
67  };
68
69} //namespace lemon
70
71#endif //LEMON_LIN_EXPR_H
Note: See TracBrowser for help on using the repository browser.